mysql 5.5编码由latin1改为utf-8

本文详细记录了如何在CentOS 5.x环境下,将MySQL编码从latin1修改为utf8的过程,包括停用MySQL服务、修改配置文件、重启服务等步骤,最终解决中文乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标签:   mysql      应用程序   border   下划线  分类:  MYSQL


最近重装了mysql,应用程序也修复了一些bug,然后应用程序出现了中文乱码问题。通过跟踪程序,在entity.save(obj)中,obj.title依然是正常的中文字符。最后,追踪到getHibernateTemplate().save(obj)。感觉程序应该没问题。应该是mysql出了问题。最后发现是mysql编码设置问题。这篇文章记录了修改编码的全过程。
本文最重要的一句:character_set_server=utf8 注意下划线_和-的区别。

测试环境:

centos 5.x
mysql 5.5

查看mysql版本mysql> select version(); +-----------+ | version() | +-----------+ | 5.5.25a | +-----------+ 1 row in set (0.00 sec)
查看mysql字符集:mysql> show variables like 'char%';
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
 # /etc/init.d/mysqld stop 

我们看到上面有几项字符集为latin1。下文主要介绍怎样修改mysql latin1编码为utf8编码。

首先,停掉mysql命令:# /etc/init.d/mysqld stop

找到mysql配置文件my.cnf 例如(/etc/my.cnf)

首先要记得备份。 备份命令:cp my.cnf my.cnfold

用vi编辑my.cnf

添加以下行到[mysqld]下面:

#collation-server=utf8_unicode_ci #ini-connect='SET NAMES utf8' character_set_server=utf8

上面我只使用了第3行,然后重启mysql问题就解决了。

重启mysql shell命令:# service mysqld start

重启如果失败,请将my.cnf还原后重启。
重启成功了!
再次查看数据库字符集,结果:

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 | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)

如果你使用的不是mysql 5.5。

可能需要参考其他资源:http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf8-in-my-cnf

mysql 5.5编码由latin1改为utf-8

<think>好的,我现在需要帮助用户配置MySQL服务器和客户端的多个设置,包括字符集、端口、安装路径、数据目录、最大连接数、默认存储引擎和SQL模式。用户提到了具体的参数,比如default-character-set utf8、port 3306等,所以我需要逐一处理每个配置项,并确保给出的步骤正确且符合最佳实践。 首先,我需要回忆MySQL的配置文件通常位于哪里。对于不同操作系统,路径可能不同,比如Windows的my.ini和Linux的my.cnf。用户可能是在Windows环境下,因为引用的命令中有net start mysql56,这通常是Windows的服务管理命令。所以我会先指出配置文件的位置,并提醒用户根据实际情况调整路径。 接下来处理每个配置项: 1. 字符集配置:用户提到default-character-set和character-set-server。在MySQL中,服务器端的字符集通常由character-set-server设置,而客户端的默认字符集则由default-character-set指定。需要注意的是,MySQL 5.5之后,default-character-set已被弃用,应该使用character-set-client、character-set-connection等替代。但为了兼容性,可能还需要同时设置default-character-set。同时,collation-server也需要对应设置,比如utf8_general_ci。此外,用户提供的引用[1]中提到更改character-set-serverlatin1的问题,所以需要确保配置正确以避免类似问题。 2. 端口配置:port 3306是默认端口,用户可能想确认是否显式设置。这里需要检查配置文件中是否有port条目,并设置为3306。如果用户想更改端口,可以在此处修改,但需要确保客户端连接时使用正确的端口,如引用[1]中的示例连接命令使用了-P3306。 3. 安装路径和数据目录:basedir和datadir需要指向正确的路径。需要提醒用户根据实际安装情况填写,例如basedir可能是C:\Program Files\MySQL\MySQL Server 8.0,而datadir可能是C:\ProgramData\MySQL\MySQL Server 8.0\Data。需要注意权限问题,确保MySQL服务有权限访问这些目录。 4. 最大连接数:max_connections默认是151,用户可能需要根据服务器资源调整。同时,可能需要调整相关参数如max_connections和table_open_cache,以确保不会耗尽资源。 5. 默认存储引擎:default-storage-engine设置为InnoDB,这是MySQL 8.0的默认引擎,但显式设置可以确保一致性。需要确认用户是否需要其他引擎,如MyISAM,但推荐使用InnoDB。 6. SQL模式:sql_mode的设置会影响SQL语句的严格性。例如,设置STRICT_TRANS_TABLES可以启用严格模式,防止无效数据插入。用户提到的引用[4]中关于PIPES_AS_CONCAT的设置,如果在sql_mode中开启,会影响||操作符的行为。需要根据用户需求配置合适的模式组合,可能包括ONLY_FULL_GROUP_BY等。 接下来,需要确保配置文件的格式正确,每个参数在正确的节下。例如,[mysqld]是服务器配置,[client]和[mysql]是客户端配置。需要提醒用户分节设置,避免混淆。 另外,用户可能需要重启MySQL服务使配置生效,如引用[1]中的net start/stop命令。配置完成后,通过SQL命令如SHOW VARIABLES来验证设置是否正确。 还需要注意版本差异,例如MySQL 8.0默认字符集是utf8mb4,而用户要求的是utf8。虽然utf8MySQL中是utf8mb3的别名,但可能需要明确说明是否使用utf8mb4以获得更好的支持。但根据用户要求,应配置为utf8。 最后,生成相关问题时要覆盖安装、验证、性能调优、安全配置等方面,帮助用户扩展知识。</think>### MySQL服务器与客户端配置步骤 #### 1. 修改配置文件 配置文件路径: - **Windows**: `my.ini`(默认在安装目录或`C:\ProgramData\MySQL\MySQL Server X.X`) - **Linux**: `/etc/my.cnf` 或 `/etc/mysql/my.cnf` 添加以下内容(以 `[mysqld]` 和 `[client]` 分节): ```ini [mysqld] # 字符集配置 character-set-server = utf8 collation-server = utf8_general_ci # 基础路径与数据目录 basedir = "C:/Program Files/MySQL/MySQL Server 8.0" # 根据实际安装路径修改 datadir = "C:/ProgramData/MySQL/MySQL Server 8.0/Data" # 根据实际数据目录修改 # 端口与连接数 port = 3306 max_connections = 200 # 建议根据服务器资源调整 # 存储引擎与SQL模式 default-storage-engine = InnoDB sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # 按需添加其他模式 [client] default-character-set = utf8 # 客户端默认字符集 ``` #### 2. 验证配置生效 ```sql -- 查看字符集配置 SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%'; -- 查看端口与连接数 SHOW VARIABLES LIKE 'port'; SHOW VARIABLES LIKE 'max_connections'; -- 查看存储引擎与SQL模式 SHOW VARIABLES LIKE 'default_storage_engine'; SHOW VARIABLES LIKE 'sql_mode'; ``` #### 3. 重启MySQL服务 ```bash # Windows net stop mysql net start mysql # Linux systemctl restart mysqld ``` #### 4. 注意事项 - **字符集兼容性**:若需支持Emoji等扩展字符,建议使用`utf8mb4`代替`utf8`[^1]。 - **权限问题**:确保MySQL服务账户对`basedir`和`datadir`有读写权限。 - **SQL模式**:`STRICT_TRANS_TABLES`会启用严格数据校验,避免非法数据插入[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值