ERROR 1366 (HY000): Incorrect string value: '\ ' for column ' ' at row 1

来源:互联网 发布:机关网络管理制度 编辑:程序博客网 时间:2024/05/22 00:46
概述:01.版本 MYSQL 5.6mysql> select  version();+-----------+| version() |+-----------+| 5.6.29    |+-----------+02.操作系统版本[root@mynode1 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.2 (Maipo)问题: 在使用mysql的source执行dum.sql转储文件时报错,由于sql转储文件里有中文,所以乱码的问题会经常发生,dmp.sql文件无论是用客户端工具nivicat,还是用mysql、source命令执行均无法正常执行报错如下:ERROR 1366 (HY000): Incorrect string value: '\xBD\xF1\xB3\xAF' for column 'username' at row 1    但在secureCRT单独执行insert插入中文可以执行成功,insert命令成功执行如下:mysql> INSERT INTO members VALUES ('1','飞翔的猪','root','9bde72','0','0','1','1','1','1','0','','1267364160','346','0','9999','0');Query OK, 1 row affected (0.00 sec) 经过分析,以上错误是与跟数据库相关的字符编码导致的,以下是我的解决思路1.检查my.conf端字符编码2.检查数据库字符编码3.检查建表的字符编码4.检查表columns的字符编码5.检查SQL转储文件的字符编码1.首先检查my.conf的字符编码#more /etc/my.conf[client]default-character-set=utf8[mysqld]default-storage-engine=INNODBcharacter-set-server=utf8collation-server=utf8_general_ci经确认,my.conf的编码为UTF8,collation-server=utf8_general_ci没有问题2.检查mysql数据库的字符编码mysql> show variables like '%char%';+--------------------------+---------------------------------------------------------------+| Variable_name            | Value                                                         |+--------------------------+---------------------------------------------------------------+| character_set_client     | utf8                                                          || character_set_connection | utf8                                                          || character_set_database   | utf8                                                          || character_set_filesystem | binary                                                        || character_set_results    | utf8                                                          || character_set_server     | latin1                                                        || character_set_system     | utf8                                                          || character_sets_dir       | /usr/local/mysql/share/charsets/ |+--------------------------+---------------------------------------------------------------+mysql> show create database test;+----------+----------------------------------------------------------------+| Database | Create Database                                                |+----------+----------------------------------------------------------------+| lanke    | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |+----------+----------------------------------------------------------------+数据库的字符集均是UTF83.检查建表的SQL语句编码Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     || members | CREATE TABLE `members` (..................................省略) ENGINE=MyISAM AUTO_INCREMENT=30107 DEFAULT CHARSET=utf8 4.检查表列的编码格式mysql> SHOW FULL COLUMNS FROM members;+--------------------+-----------------------+-----------------+------+-----+---------+----------------+| Field              | Type                  | Collation       | Null | Key | Default | Extra          |+--------------------+-----------------------+-----------------+------+-----+---------+----------------+| uid                | mediumint(8) unsigned | NULL            | NO   | PRI | NULL    | auto_increment || email              | char(40)              | utf8_general_ci | NO   | MUL |         |                || username           | char(15)              | utf8_general_ci | NO   | UNI |         |                || password           | char(32)              | utf8_general_ci | NO   |     |         |                || status             | tinyint(1)            | NULL            | NO   |     | 0       |                || emailstatus        | tinyint(1)            | NULL            | NO   |     | 0       |                || avatarstatus       | tinyint(1)            | NULL            | NO   |     | 0       |                || videophotostatus   | tinyint(1)            | NULL            | NO   |     | 0       |                || adminid            | tinyint(1)            | NULL            | NO   |     | 0       |                || groupid            | smallint(6) unsigned  | NULL            | NO   | MUL | 0       |                || groupexpiry        | int(10) unsigned      | NULL            | NO   |     | 0       |                || extgroupids        | char(20)              | utf8_general_ci | NO   |     |         |                ||+--------------------+-----------------------+-----------------+------+-----+---------+----------------经检查members表和列的字符编码为UTF8以上字符集均是统一的UTF8格式,那么问题很可能出现在SQL的转储文件中,我们需要一个统一的unicode格式或许能解决中文乱码问题,用ultraedit打开dmp.sql转储文件进行字符及转化具体如下打开ultraeidt工具栏,分别找到 文件-->转换-->ASCII到UTF8(UNICODE编辑),完成后进行保存,再上传到mysql服务器上,重新执行source命令mysql>source /tmp/dum.sqlQuery OK, 1 row affected (0.00 sec)Query OK, 1 row affected (0.00 sec)................................省略Query OK, 1 row affected (0.00 sec)至此,不再出现ERROR 1366 (HY000)报错,中文字段全部成功insert,在客户端查看表,中文正常显示不再有乱码问题注:什么是unicode?     Unicode 是为了解决传统的字符编码方案的局限而产生的,例如ISO 8859所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。    Unicode 编码包含了不同写法的字,如“ɑ/a”、“户/户/戸”。然而在汉字方面引起了一字多形的认定争议(详见中日韩统一表意文字主题)。    在文字处理方面,统一码为每一个字符而非字形定义唯一的代码(即一个整数)。换句话说,统一码以一种抽象的方式(即数字)来处理字符,并将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。几乎所有电脑系统都支持基本拉丁字母,并各自支持不同的其他编码方式。Unicode为了和它们相互兼容,其首256字符保留给ISO 8859-1所定义的字符,使既有的西欧语系文字的转换不需特别考量;并且把大量相同的字符重复编到不同的字符码中去,使得旧有纷杂的编码方式得以和Unicode编码间互相直接转换,而不会丢失任何信息。举例来说,全角格式区段包含了主要的拉丁字母的全角格式,在中文、日文、以及韩文字形当中,这些字符以全角的方式来呈现,而不以常见的半角形式显示,这对竖排文字和等宽排列文字有重要作用。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面(英文为 Basic Multilingual Plane,简写 BMP。它又简称为“零号平面”, plane 0)里的所有字符,要用四位十六进制数(例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五位或六位十六进制数了。旧版的Unicode标准使用相近的标记方法,但却有些微的差异:在Unicode 3.0里使用“U-”然后紧接着八位数,而“U+”则必须随后紧接着四位数。
0 0
原创粉丝点击