我有口一些DBS成独立的MySQL版本:5.0.18上Windows7的64位运行,我有一个问题,我坚持。如果我尝试插入任何国家/ Unicode字符到varchar
我得到错误:数据太长,列误差与民族特色
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
缺失。
我知道这些的问题答案的:
- 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字符的处理进行了更改。我从你的自答中看出你这次躲过子弹。 –