数据库中数据的导入导出是一个最简单, 也是最必须的功能.
比如系统在开发时候在个人PC机上, 数据库有很多的初始化数据, 系统开发完成了, 则要把这些初始化数据从PC机上导出成SQL脚本, 在服务器上只要导入这些SQL脚本即可完成数据库初始化.
但是, 对于中文字符的导入却成了大问题, 导入中文, 数据老是报错"Data too long for column XX at row n"
这个问题一直困扰着我, 由于以前数据量比较小, 也就不用导入功能, 大不了再重新初始化一次了. 如今不行了, 初始化数据实在太多, 不可能重新初始化, 但我一直认为一定会有办法解决这个问题, 今天上网找资料搞了大半天, 这个问题基本解决.
为了清楚描述这个问题, 现详细讲解如下:
1. 建数据库
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\awish>mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 24 to server version: 5.0.27-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database test;
2. 设置数据编码为utf8
mysql> use test;
Database changed
mysql> set names utf8; //设置数据库字符集为utf8
Query OK, 0 rows affected (0.00 sec)
3. 创建数据表
mysql> CREATE TABLE person
-> (
-> id INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name varchar(16) default 'nobody',
-> birthday char(19),
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8//创建数据表,字符集设定为utf8
-> ;
Query OK, 0 rows affected (0.03 sec)
4. 创建导入SQL脚本文件 c:\test.sql
use test;
insert into person values(null, '张三', '1984-08-20');
insert into person values(null, '李四', '1984-08-20');
insert into person values(null, '王五', '1984-08-20');
5. 导入SQL脚本文件
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\awish>mysql -u root -p test<C:\test.sql
Enter password: *******
ERROR 1406 (22001) at line 3: Data too long for column 'name' at row 1
C:\Documents and Settings\awish>
分析: 很明显, 张三, 李四, 王五 只有4个字节, 而建表时定义最多可以有15个, 理论下完全可以, 为什么 too long 呢? 唯一的解释就是编码问题!!!!
若把上面SQL脚本改为: insert into person values(null, 'aaaaaaaaaaaaaa', '1984-08-20'); 却可以正常插入!!
后来找资料发现, MySQL的默认编码为 gb2312
在 test.sql 脚本中加入: set names gb2312 问题解决
use test;
set names gb2312;
insert into parent values(null, '张三', '1984-08-20');
insert into parent values(null, '李四', '1984-08-20');
insert into parent values(null, '王五', '1984-08-20');
导入命令:
C:\Documents and Settings\awish>mysql -u root -p test<C:\test.sql
Enter password: *******
C:\Documents and Settings\awish>
导入成功!!!
6. 查询数据
C:\Documents and Settings\awish>mysql -u root -p test
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 27 to server version: 5.0.27-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test;
Database changed
mysql> select * from person;
+----+--------+------------+
| id | name | birthday |
+----+--------+------------+
| 1 | 寮犱笁 | 1984-08-20 |
| 2 | 鏉庡洓 | 1984-08-20 |
| 3 | 鐜嬩簲 | 1984-08-20 |
+----+--------+------------+
3 rows in set (0.00 sec)
mysql>
由于中文字符编码为 utf8 后, 人是不认得了, 我们可以导出看其效果!
7. 导出数据库
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\awish>mysqldump -u root -p test>c:\test2.sql
Enter password: *******
C:\Documents and Settings\awish>
我们把它存为 C:\test2.sql
打开test2.sql 脚本文件, 我们将会看到:
--
-- Table structure for table `person`
--
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(16) default 'nobody',
`birthday` char(19) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `person`
--
LOCK TABLES `person` WRITE;
/*!40000 ALTER TABLE `person` DISABLE KEYS */;
INSERT INTO `person` VALUES (1,'张三','1984-08-20'),(2,'李四','1984-08-20'),(3,'王五','1984-08-20');
/*!40000 ALTER TABLE `person` ENABLE KEYS */;
UNLOCK TABLES;
数据完全正确!!
这时如果要想把 test2.sql文件导入到数据库中, 按照上面的, 加上: set names gb2312
转载于:http://gpj1016.blog.163.com/blog/static/8202645120100842119212/
分享到:
相关推荐
通过以上解决方案,我们可以正确地导入中文字符到 MySQL 中,无需再担心“Data too long for column XX at row n”的错误。同时,我们也需要了解 MySQL 的默认编码为 gb2312,并且需要在不同的场景下选择正确的编码...
在MySQL数据库操作中,当你尝试插入或更新一行数据时,如果某个字段的值超过了该字段定义的最大长度,系统会抛出“ERROR 1406 : Data too long for column”的错误。这个错误提示非常直接,意味着你试图输入的数据在...
报错信息:Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535 向mysql的表插件一个字段 类型为text时,或修改一个字段类型为text时,报出上面的错误。其实我对这个...
### Navicat for MySQL 导入Excel中文乱码问题解决 #### 一、问题背景 在使用Navicat for MySQL工具进行数据导入时,经常会出现中文乱码的问题,尤其是在处理Excel文件时更为常见。这种现象不仅影响数据的正确性,...
解决出现Incorrect integer value: ” for column ‘id’ at row 1的问题 前言: 今天在学习Python的过程中操作数据库,遇到了一个问题,执行sql语句插入数据的时候报错Incorrect integer value: ” for column ‘id...
- 如果“data too long for column”错误与中文字符有关,可能是因为字段类型设置过小,无法容纳UTF-8编码的中文字符。例如,VARCHAR(2)只能存放一个英文字符,但可能放不下一个中文字符。可以调整字段长度或使用更...
- `com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column` 错误表示数据长度超过了列的允许长度,这通常不是字符集问题,而是字段长度不足。需检查对应列的定义并调整其大小。 7. **...
MySQL数据库系统中文乱码问题及解决方案 MySQL数据库系统中文乱码问题是指在使用MySQL数据库系统时,中文字符在存储、传输和显示过程中出现乱码的问题。这种问题的出现是由于字符集和编码方式的不兼容所致。 在...
在使用数据库进行数据操作时,有时会遇到错误提示"Incorrect integer value: '' for column 'id' at row 1"。这个错误通常出现在尝试插入数据到一个整数类型的列时,而该列期望的是一个整数值,但提供的值是空字符串...
在数据库管理和维护中,数据导入和导出是非常关键的操作,尤其是在MySQL数据库管理系统中。数据导入导出的目的多种多样,比如数据备份、数据迁移、数据整合等,因此掌握高效可靠的数据导入导出方法对于数据库管理员...
pb 导入 mysql5.0 中中文乱码问题解决方案 在使用 Pb 将数据导入到 MySQL 5.0 时,中文乱码问题是一个常见的问题。在本文中,我们将讨论两个解决方案,帮助开发者快速解决中文乱码问题。 解决方案一:使用 set ...
### jsp+mysql中文乱码解决方案集合 在使用JSP结合MySQL进行Web应用开发时,中文乱码问题一直是困扰开发者的一大难题。本文将详细介绍如何在MySQL数据库层面解决中文乱码问题,并提供一系列实用的方法和技巧。 ###...
在MySQL数据库中,遇到中文无法插入的问题通常是由于字符集设置不正确导致的。这涉及到数据库、表以及字段的字符集配置。以下是一些详细的解决步骤和相关知识点: 1. **字符集基础**: - 字符集(Character Set)...
解决 MySql 数据库导入中文乱码的问题需要正确设置字符集,并在数据库连接文件中指定字符集。只有这样,我们才能正确地导出和导入 MySql 数据库。 在实际操作中,我们需要注意以下几点: 1. 在导出数据库时,需要...
本文将深入探讨MySQL中文乱码问题的原因、解决方法,以及如何在创建数据库和表时避免这类问题。 首先,我们要了解字符集的概念。字符集(Character Set)是计算机系统用来表示文本的一系列符号和编码,例如ASCII、...