je dois le port une DBS en stand alone MySQL Version: 5.0.18 courir sur Windows7 64bit et moi avons eu un problème, je suis coincé avec. Si je tente d'insérer un caractère national/unicode dans varchar
Je suis erreur:données trop long pour erreur de colonne avec des caractères nationaux
ERROR 1406 (22001): Data too long for column 'nam' at row 1
Ici MCVE script SQL:
SET NAMES utf8;
DROP TABLE IF EXISTS `tab`;
CREATE TABLE `tab` (`ix` INT default 0,`nam` VARCHAR(1024) default '') DEFAULT CHARSET=utf8;
INSERT INTO `tab` VALUES (1,'motorček');
INSERT INTO `tab` VALUES (2,'motorcek');
SELECT * FROM `tab`;
Et ici la sortie:
mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP TABLE IF EXISTS `tab`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE `tab` (`ix` INT default 0,`nam` VARCHAR(1024) default '') DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `tab` VALUES (1,'motorček');
ERROR 1406 (22001): Data too long for column 'nam' at row 1
mysql> INSERT INTO `tab` VALUES (2,'motorcek');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM `tab`;
+------+----------+
| ix | nam |
+------+----------+
| 2 | motorcek |
+------+----------+
1 row in set (0.00 sec)
Comme vous pouvez voir l'entrée avec le caractère national č
E8h
est manquant.
Je suis au courant de ces QAs:
- How to make MySQL handle UTF-8 properly
- “Data too long for column” - why?
- Error Code: 1406. Data too long for column - MySQL
mais ils ne traitent pas ce problème (pas de solution de l'un de ces travaux pour ce).
Ce problème est présent même pour les chaînes de caractères simples. Peu importe la taille de VARCHAR
. Donc la seule solution pour l'instant est de changer les caractères nationaux en ASCII mais cela perdrait des informations que je préférerais éviter.
J'ai essayé d'utiliser différents jeux de caractères utf8, ucs2, latin1
sans aucun effet.
J'ai essayé de supprimer le comme le suggèrent d'autres réponses, mais cela n'a aucun effet sur ce point (et la taille de la chaîne est plusieurs fois plus grande que nécessaire).
Quelqu'un a des indices?Peut-être qu'il a quelque chose à voir avec ce que ce serveur MySQL est autonome (il est pas installé) est démarré avec ce cmd:
@echo off
bin\mysqld --defaults-file=bin\my.ini --standalone --console --wait_timeout=2147483 --interactive_timeout=2147483
if errorlevel 1 goto error
goto finish
:error
echo.
echo MySQL could not be started
pause
:finish
et les requêtes sont effectuées à l'intérieur de la console a commencé comme ça cmd:
@echo off
bin\mysql.exe -uroot -h127.0.0.1 -P3306
rem bin\mysql.exe -uroot -proot -h127.0.0.1 -P3306
Vous devez mettre à jour! 5.0.18 a presque 12 ans. 5.1, 5.5, 5.6, 5.7 et 8.0 ont apporté des modifications à la gestion des caractères non-ascii. Je vois de votre auto-réponse que vous avez esquivé la balle cette fois. –