【发布时间】:2018-03-25 10:02:54
【问题描述】:
我必须将一些 DBS 移植到在 Windows7 64bit 上运行的独立 MySQL 版本:5.0.18,我遇到了问题坚持。如果我尝试在varchar 中插入任何国家/地区/unicode 字符,则会出现错误:
ERROR 1406 (22001): Data too long for column 'nam' at row 1
这里是 MCVE 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`;
这里输出:
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)
如您所见,缺少带有国家字符 č E8h 的条目。
我知道这些 QA:
- How to make MySQL handle UTF-8 properly
- “Data too long for column” - why?
- Error Code: 1406. Data too long for column - MySQL
但他们没有解决这个问题(没有任何解决方案可以解决这个问题)。
即使是单个字符串也存在此问题。不管VARCHAR 的大小。所以目前唯一的解决方案是将国家字符更改为 ASCII 但这会丢失我宁愿避免的信息。
我尝试使用各种字符集utf8, ucs2, latin1 没有任何效果。
我尝试删除STRICT_TRANS_TABLES,正如其他一些答案所建议的那样,但这也没有效果(字符串大小比需要的大很多倍)。
有人有线索吗?可能与此 MySQL 服务器是独立的(未安装)有关,它是使用此 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
查询是在控制台内完成的,像这样cmd:
@echo off
bin\mysql.exe -uroot -h127.0.0.1 -P3306
rem bin\mysql.exe -uroot -proot -h127.0.0.1 -P3306
【问题讨论】:
-
你应该升级! 5.0.18 快 12 岁了。 5.1、5.5、5.6、5.7 和 8.0 对非 ASCII 字符的处理进行了更改。我从你的自我回答中看出你这次躲过了子弹。