`

mysql修改表默认字符集可能带来的隐患

 
阅读更多

原文链接:http://www.javaarch.net/jiagoushi/627.htm

 

 

mysql修改表默认字符集可能带来的隐患

 

我们在建表后如果后续需要修改表的默认字符集,可以通过ALTER TABLE来修改表的默认编码

 

1. ALTER TABLE tablename DEFAULT CHARACTER SET utf8;

 

但是这样有个问题,只改了表定义的默认编码,对于每个列的已有字段的内容还是使用以前的编码,已有表数据不会做编码转换。

 

mysql> create table mybig5 (id int not null auto_increment primary key,       
		   -> subject varchar(100) ) engine=innodb default charset big5;
	Query OK, 0 rows affected (0.81 sec)

	mysql> show create table mybig5;
	+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
	| Table  | Create Table                                                                                                                                                     |
	+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
	| mybig5 | CREATE TABLE `mybig5` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `subject` varchar(100) DEFAULT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB DEFAULT CHARSET=big5 |
	+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
	1 row in set (0.00 sec)

	mysql> alter table mybig5 default charset utf8;
	Query OK, 0 rows affected (0.17 sec)
	Records: 0  Duplicates: 0  Warnings: 0

 然后我们插入一个多字节的字符串记录到表里

 

 

mysql> INSERT INTO mybig5 VALUES (NULL, UNHEX('E7BB8FE79086'));

	 01:08:19  [INSERT - 0 row(s), 0.000 secs]  [Error Code: 1366, SQL State: HY000]  Incorrect string value: '\xE7\xBB\x8F\xE7\x90\x86' for column 'SUBJECT' at row 1
	... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec  [0 successful, 0 warnings, 1 errors]

	mysql> show create table mybig5;
	+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
	| Table  | Create Table                                                                                                                                                                        |
	+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
	| mybig5 | CREATE TABLE `mybig5` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `subject` varchar(100) CHARACTER SET big5 DEFAULT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
	+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
	1 row in set (0.00 sec)

 我们可以看到列subject还是big5编码,没有改为utf8编码。

 

我们可以使用2. ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;来修改列的编码

	mysql> show create table mybig5;
	mysql> +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
		-> | Table  | Create Table                                                                                                                                                     |
		-> +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
		-> | mybig5 | CREATE TABLE `mybig5` (
		->   `id` int(11) NOT NULL AUTO_INCREMENT,
		->   `subject` varchar(100) DEFAULT NULL,
		->   PRIMARY KEY (`id`)
		-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
		-> +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
		-> 1 row in set (0.00 sec)
		

 

但是这里要注意已有内容编码转换要注意编码可转换,不会成为乱码

 

 

 

0
0
分享到:
评论

相关推荐

    快速安装卸载简化版mysql

    `my.ini`是MySQL服务器的配置文件,通常包含服务器的启动选项,如端口号、数据存储位置、默认字符集等。在安装前,你需要根据自己的需求编辑这个文件,例如,设置`datadir`为数据库文件存储的位置,`port`为MySQL...

    MySQL命令大全

    在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如...

    MySQL5配置.doc

    - **定义**:设置服务器的默认字符集。 - **作用**:影响新创建的数据库和表的字符集。 - **示例**:`character_set_server=utf8mb4` 2. **collation_server=name** - **定义**:设置服务器的默认排序规则。 -...

    mysql 服务器安装详细图解.docx

    在配置MySQL的默认字符集时,选择支持中文的"gbk"或"gb2312"。为了能够正常显示和处理汉字,记得在执行SQL命令前运行"SET NAMES GBK;"。 接下来,你可以选择是否将MySQL安装为Windows服务,并设置服务名称。同时,...

    常用的mysql命令总结.txt

    - `--default-character-set=charset`: 指定字符集,默认为latin1,可以根据实际情况调整。 - `--disable-keys`: 禁用索引创建和删除语句,可以加快导入速度,但仅适用于MyISAM表。 - `--extended-insert`: 控制是否...

    mysql安装图解

    - **字符集**: 选择**UTF-8**以支持多语言环境。 - **排序规则**: 根据需要选择。 ##### 8. Windows服务配置 - **服务名称**: 建议使用**mysql01**。 - **加入Windows PATH**: 使MySQL命令行工具更容易访问。 - **...

    MySQL安装图解

    - **Character Set(字符集)**:选择GBK或UTF8等支持中文的字符集,确保数据库能正确处理中文数据。 - **Windows Service Options(Windows服务选项)**: - “Install As Windows Service”:必须勾选,以确保...

    MySQL安装的图解

    - 选择合适的字符集,对于中文环境,推荐选择支持多字节的“UTF-8”或“GBK”,并确保“Character Set”设置为“gbk”或“utf8”。 5. **服务配置**: - 决定是否将MySQL安装为Windows服务,并设置服务名称。 - ...

    mysql安装指南

    * 选择字符设置需要根据用户的语言环境进行设置,例如选择gb2312字符集可以支持简体中文,选择big5可以支持繁体中文。 * 在设置Windows服务选项时,需要勾选“Install As Windows Service”和“Launch the MySQL ...

    MySql 5.6.35 winx64 安装详细教程

    配置文件中还定义了服务端口号、默认字符集、服务器的字符集和存储引擎等重要参数。完成配置文件的编写后,需要将其拷贝到Windows目录下,以确保MySQL启动时能够加载这些配置。 之后,就可以从命令行窗口进入MySQL...

    [php]mysql数据库操作——DB类

    // 显示所有错误,具有安全隐患,默认开启 private $pageNo=1; // 当前页 private $pageAll=1; // 总页数 private $rsAll=0; // 总记录 private $pageSize=10; // 每页显示记录条数 /************************...

    MySQL5.7的安装与配置详细操作步骤

    最后,character-set-server参数和default-storage-engine参数分别用来设置服务端默认字符集和创建新表时使用的默认存储引擎为INNODB。 在修改完配置文件之后,需要配置环境变量。这通常涉及将MySQL的bin目录添加到...

    Win7iis+mysql+php+phpmyadmin安装说明收集.pdf

    - 字符集选择很重要,推荐使用UTF-8,避免JDBC连接时的乱码问题。但要注意,某些情况下可能需要设置“set names gbk”来正确显示汉字。 3. **PHP安装**: - PHP是一种服务器端的脚本语言,常用于动态网页开发,与...

    2011最新Windows_Server2008_PHP配置环境搭建图解教程

    - 设置默认字符集,通常选择 GBK 或 UTF-8,根据项目需求而定。 - 配置 Windows 服务模式,并设置 root 用户密码。 - 安装完成后,MySQL 应已自动启动。 - **测试 MySQL 数据库**: - 打开命令行工具,输入 `...

    学校网站最初形式与紧急的解决方案.pptx

    解决方法可能包括修改配置文件、调整字符集设置等。在升级过程中,确保所有相关应用程序如phpMyAdmin能够正常运行,必要时进行兼容性调整。 最后,对于Web服务器的PHP设置,例如在php.ini中启用安全模式(safe_mode...

    ThinkPHP实现将SESSION存入MYSQL的方法

    创建数据表时需要注意表引擎和字符集的设置,以便于与PHP环境保持一致。 5. 测试和验证:在完成上述配置后,访问应用程序的index.php文件,如果一切设置正确,那么在phpmyadmin中查看之前指定的数据表,应该会发现...

    ECShop函数手册

    - **功能**:自定义的字符集转换。 - **参数**: - $source_lang:源字符集。 - $target_lang:目标字符集。 - $source_string:待转换的字符串,默认为空字符串。 - **返回值**:转换后的字符串。 #### ecs_...

    dede后台单点登录-utf-8

    该插件支持UTF-8编码,确保了在全球化环境下对各种语言字符集的支持,这对于国际化的网站尤其重要。UTF-8编码是目前最广泛使用的Unicode字符编码形式,可以正确显示世界上几乎所有的字符,避免了因为编码不一致导致...

Global site tag (gtag.js) - Google Analytics