GVKun编程网logo

MySQL 数据库插入中文时出现 Incorrect string value: ''\xE6\x97\xB7\xE5\x85\xA8'' for column''sz_name...

5

以上就是给各位分享MySQL数据库插入中文时出现Incorrectstringvalue:''\xE6\x97\xB7\xE5\x85\xA8''forcolumn''sz_name...,同时本文还

以上就是给各位分享MySQL 数据库插入中文时出现 Incorrect string value: ''\xE6\x97\xB7\xE5\x85\xA8'' for column''sz_name...,同时本文还将给你拓展(1366, "Incorrect string value: ''\\xE5\\x93\\x88\\xE5\\x93\\x88'' for column ''body'' at row 1")、(1366, "Incorrect string value: ''\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...'' for column ''、Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column、django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: ''\xE5\xBE\x88\xE7\...等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

MySQL 数据库插入中文时出现 Incorrect string value: ''\xE6\x97\xB7\xE5\x85\xA8'' for column''sz_name...

MySQL 数据库插入中文时出现 Incorrect string value: ''\xE6\x97\xB7\xE5\x85\xA8'' for column''sz_name...

今天在开发时候出现了这个问题

Incorrect string value: ''\xE6\x97\xB7\xE5\x85\xA8'' for column ''sz_name'' at row 1

场景,往 MySQL 数据库的表中插入中文参数,抛出了这个异常

我用 sqlyog 执行该段代码时候发现只是出现警告,并没有出现 error,但是在代码里面执行抛出了异常,说明管理工具 sqlyog 对有些约定不是那么严格,而代码中就会报错。提醒自己,以后写 sql 时候不能忽略管理工具中出现的警告。

解决方案:

在用 sql 语句建表的时候加入  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci  即可

下面是我的建表语句:

CREATE TABLE `stat_day_exception_201807` (
  `ng_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `ng_report_id` bigint(20) DEFAULT NULL,
  `nt_type` int(11) NOT NULL,
  `sz_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `sz_reason` text COLLATE utf8_unicode_ci,
  `bt_charge` int(11) DEFAULT ''0'',
  `ts_begin` datetime DEFAULT NULL,
  `ts_end` datetime DEFAULT NULL,
  `bt_attendance` int(11) DEFAULT ''0'',
  `nt_count` decimal(10,4) NOT NULL DEFAULT ''0.0000'',
  `nt_minutes` int(11) DEFAULT ''0'',
  `sz_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `ng_user_id` bigint(20) DEFAULT NULL,
  `dt_date` datetime DEFAULT NULL,
  PRIMARY KEY (`ng_id`),
  KEY `I_stat_day_exception_sys_user` (`ng_user_id`),
  KEY `I_stat_day_exception_day` (`dt_date`)
) ENGINE=InnoDB AUTO_INCREMENT=1701 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

(1366,

(1366, "Incorrect string value: ''\\xE5\\x93\\x88\\xE5\\x93\\x88'' for column ''body'' at row 1")

产生原因:mysql插入数据中有中文

解决方案:

https://stackoverflow.com/questions/1168036/how-to-fix-incorrect-string-value-errors

ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

(1366,

(1366, "Incorrect string value: ''\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...'' for column ''

Sql代码 收藏代码 mysql> use varchar_vs_char;
Database changed
mysql> desc user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | 0 | |
| username | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

可以插入的数据:

Sql代码 收藏代码 mysql> use varchar_vs_char;
Database changed
mysql> select * from user;
+----+----------------------+
| id | username |
+----+----------------------+
| 1 | adminadmin |
| 2 | 我是中国人我是中国人 |
+----+----------------------+
2 rows in set (0.01 sec)

也就是说对于unicode来说一个英文字符和一个中文字符是一样大小的,而且varchar(10)中的10就是表示10个unicode码!

因为是处理中文的,所以把D:\Program Files\MySQL\MySQL Server 5.1\my.ini编码设置成如下gbk:

Sql代码 收藏代码 [client]

port=3306

[mysql]

default-character-set=gbk

SERVER SECTION

----------------------------------------------------------------------

The following options will be read by the MySQL Server. Make sure that

you have installed the server correctly (see above) so it reads this

file.

[mysqld]

The TCP/IP Port the MySQL Server will listen on

port=3306

#Path to installation directory. All paths are usually resolved relative to this.
basedir="D:/Program Files/MySQL/MySQL Server 5.1/"

#Path to the database root
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"

The default character set that will be used when a new schema or table is

created and no character set is defined

default-character-set=gbk

The default storage engine that will be used when create new tables when

default-storage-engine=INNODB

附注:

更新的数据中有中文,出现如下错误: OperationalError at /admin/blog/post/add/

(1366, "Incorrect string value: ''\xE6\xB7\xB1\xE5\x85\xA5...'' for column ''title'' at row 1")

Request Method: POST Request URL: http://localhost:8000/admin/blog/post/add/ Exception Type: OperationalError Exception Value:

(1366, "Incorrect string value: ''\xE6\xB7\xB1\xE5\x85\xA5...'' for column ''title'' at row 1")

Exception Location: C:\Python25\Lib\site-packages\MySQLdb\connections.py in defaulterrorhandler, line 35

类似这样的错误,应该是数据库表的charset和collation问题。尝试把所有表的charset改为utf-8, collation改为utf8-unicode-ci。如果还是不能解决,最好是重建数据库,然后修改数据库的属性,选择charset为utf-8,collation为utf8-unicode-ci。命令行:create database cc default charset utf8 collate utf8_unicode_ci; PS:我就是要重建数据库才解决。

Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column

Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column

Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column NICK_NAME

发现日志里有挺多这种错误,是什么原因造成的,是写入名称的时候会报这个错,而且''\xF0\x9F\x91\x91\xE5\xB0...''这个错误都是一样

django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: ''\xE5\xBE\x88\xE7\...

django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: ''\xE5\xBE\x88\xE7\...

分析:

1.尝试在Python中对数据转码成utf8,''中文''.encode("utf-8"),还是报错 

2.观察堆栈发现应该是操作mysql数据库的时候,将数据插入表里出错

 

所以第一种方式排除;集中从第二种原因找突破:

在mysql中查看字符相关的变量:

发现character_set_database 编码是latin1不是utf8,问题应该就在这里。

那我们现在就要把这个字符改过来。

这里注意:你们其他变量名的值也不是utf8,这里是你们my.ini配置文件里没有设置,mysql就用的是默认值

[client] 

default-character-set =utf8

[mysql] 

default-character-set =utf8

[mysqld]

collation-server = utf8_unicode_ci
init_connect =''SET NAMES utf8''
character_set_server=utf8

其中:

init_connect =''SET NAMES utf8'' 相当于把charact_set_client ,character_set_server,character_set_connection都设置成utf8了,我怕到时又出啥问题就没去掉了。

我也尝试了在[mysqld]下

添加:character_set_database =utf8 可是启动mysql服务的时候报错。查找资料跟mysql的版本有问题,我mysql的版本是5.6.*

那就只有通过mysql的命令去修改编码了:

set character_set_database=utf8;

在查看的时候编码就修改了

再次测试代码后发现还是有问题。

然后查看了下django连接的数据库,以及生成的表的编码发现编码不是utf8,所以这里还要修改数据库,表的编码

 

a)查看数据库的编码:show create database databaseName;
b)修改数据库编码: alter database databaseName default character set utf8 collate utf8_general_ci;
a)查看建表的编码:show create table tableName;

修改后查看编码都已经是utf8了应该不会有错了。果然测试可以了。

 

下面附上mysql的一些相关命令:

 

通过MySQL命令行修改:
  set character_set_client=utf8;
  set character_set_connection=utf8;
  set character_set_database=utf8;
  set character_set_results=utf8;
  set character_set_server=utf8;
  set character_set_system=utf8;
  set collation_connection=utf8;
  set collation_database=utf8;
  set collation_server=utf8;
修改数据库字符集:
     ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
     如:
     ALTER TABLE test CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
     修改表的默认字符集:
     ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
     如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
     修改字段的字符集:
     ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
     如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

我们今天的关于MySQL 数据库插入中文时出现 Incorrect string value: ''\xE6\x97\xB7\xE5\x85\xA8'' for column''sz_name...的分享已经告一段落,感谢您的关注,如果您想了解更多关于(1366, "Incorrect string value: ''\\xE5\\x93\\x88\\xE5\\x93\\x88'' for column ''body'' at row 1")、(1366, "Incorrect string value: ''\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...'' for column ''、Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column、django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: ''\xE5\xBE\x88\xE7\...的相关信息,请在本站查询。

本文标签: