2016-12-16 1 views
1

J'ai une base de données et un type de colonne bigint. Chaque fois que j'insère de la valeur dans cette colonne, j'ai toujours le mauvais numéro. par exemple, j'insère la valeur "198705122006041001" et insère toujours cette valeur "2147483647".bigint ne pas insérer correctement

J'utilise laravel pour mon projet, si j'utilise eloquent pour afficher le bigint il ne s'affichera pas correctement mais si j'utilise PDO manuellement, il s'affichera correctement.

Répondre

2

Vous devriez vérifier à nouveau, car c'est certainement int, mais pas bigint. 2147483647 est un maximum possible value for signed int

+0

Mon problème est que si j'utilise Eloquent pour afficher les valeurs de cette colonne, il se rétablira 2147483647 quelle que soit la valeur. Si j'utilise PDO manuellement pour récupérer les données, il montrera la bonne valeur. Alors, comment je peux gérer ce Bigint à Eloquent? La conversion en varchar/text ou string n'est pas une option. Merci –

2

PHP n'a pas de type de données bigint, il overwflows et utilise int.max à la place. Vous devez représenter bigints comme une chaîne ou un flotteur. Attention, ce flotteur n'est pas précis et peut entraîner des surprises.

Faites les transformations mathématiques dans MySQL et n'oubliez pas de lancer vers bigint si nécessaire.

+0

Mon problème est que si j'utilise Eloquent pour montrer les valeurs de cette colonne, il va reutrn 2147483647 quelle que soit la valeur. Si j'utilise PDO manuellement pour récupérer les données, il montrera la bonne valeur. Alors, comment je peux gérer ce Bigint à Eloquent? La conversion en varchar/text ou string n'est pas une option. Merci –

1

Voir https://laracasts.com/discuss/channels/eloquent/fbid-bigint-with-model-and-eloquent. Un utilisateur de Laravel a eu le même problème, et a dû finir le résultat à une chaîne.

Un autre commentaire d'utilisateur a indiqué que XAMPP fournit uniquement un binaire PHP 32 bits, ce qui limite la taille d'un entier PHP.

Vérifiez votre taille entier PHP avec ce code:

<?php 

echo "Integer size can be determined using the constant PHP_INT_SIZE=" 
    . (PHP_INT_SIZE * 8) 
    . " bits, maximum value using the constant PHP_INT_MAX=" 
    . PHP_INT_MAX; 

Voir aussi http://php.net/manual/en/language.types.integer.php

et obtenir https://laravel.com/docs/5.3/homestead Installer un binaire PHP 64 bits.