`
waiting
  • 浏览: 234769 次
  • 性别: Icon_minigender_1
  • 来自: cq
社区版块
存档分类
最新评论

MySQL COMPACT栏格式导致输出乱码

阅读更多
CentOS 5.2, PHP 5.1.6, MYSQL 5.0.77. 数据库UTF8,表MYISAM引擎,采用PEAR::MDB2访问。
读取出的中文会有乱码尾巴。使用EMS/navicat查看数据都正常。折腾半天最后发现应该和表的Row format格式有关:如果使用COMPACT格式则会出现记录输出时中文文字后面跟着乱码。即使把格式改成Dynamic已有的记录在输出时还是有乱码,估计是这条记录的row结构并未更新,手动更新这条记录的中文后(这条记录)在输出时就不会出现乱码尾巴了。

查询资料,关于compact row format:
引用
#

InnoDB tables use a compact storage format. In versions of MySQL earlier than 5.0.3, InnoDB rows contain some redundant information, such as the number of columns and the length of each column, even for fixed-size columns. By default, tables are created in the compact format (ROW_FORMAT=COMPACT). If you wish to downgrade to older versions of MySQL, you can request the old format with ROW_FORMAT=REDUNDANT.

The presence of the compact row format decreases row storage space by about 20% at the cost of increasing CPU use for some operations. If your workload is a typical one that is limited by cache hit rates and disk speed it is likely to be faster. If it is a rare case that is limited by CPU speed, it might be slower.

The compact InnoDB format also changes how CHAR columns containing UTF-8 data are stored. With ROW_FORMAT=REDUNDANT, a UTF-8 CHAR(N) occupies 3 × N bytes, given that the maximum length of a UTF-8 encoded character is three bytes. Many languages can be written primarily using single-byte UTF-8 characters, so a fixed storage length often wastes space. With ROW_FORMAT=COMPACT format, InnoDB allocates a variable amount of storage in the range from N to 3 × N bytes for these columns by stripping trailing spaces if necessary. The minimum storage length is kept as N bytes to facilitate in-place updates in typical cases.


引用
# 在MySQL/InnoDB中,InnoDB表使用更紧凑的存储格式。在以前版本的MySQL中,InnoDB记录包含一些冗余信息,例如列数目和每个列的长度,即使对于固定大小的列。默认情况,创建的表为紧凑格式(ROW_FORMAT=COMPACT)。如果想要降级旧版本的MySQL/InnoDB,可以用ROW_FORMAT=REDUNDANT要求旧的格式。
# 紧凑的InnoDB格式也改变了包含UTF-8数据的CHAR列的保存方式。在ROW_FORMAT=REDUNDANT格式中,UTF-8 CHAR(n)占用3*n字节,假定UTF-8编码的字符的最大长度是3字节。许多语言可以主要用单字节UTF-8字符来编写,固定的存储长度通常会浪费空间。通过根据需要剥离尾部的空格,ROW_FORMAT=COMPACT格式为这些列分配可变数量的n..3*n字节。最小存储长度按顺序保存为n字节,以在典型情况下帮助更新。

http://www.guduo.net/2009/04/000189.html

估计是compact紧凑格式使得中文字符在保存时有问题,或者是导致在输出时不能正常判断字符切分位置。
不过我发现InnoDB格式似乎并不能指定compact row format.
分享到:
评论

相关推荐

    MySQL乱码解决方案数据库乱码

    在处理MySQL数据库时,遇到字符集编码不一致导致的数据乱码问题非常常见。这不仅会影响数据的正确显示,还可能导致数据丢失或损坏。根据提供的标题、描述、标签以及部分内容来看,本文将围绕MySQL乱码问题进行深入...

    mysql中文乱码问题

    在 MySQL 中,中文乱码问题通常是由于 character_set_server 变量的设置不正确所导致的。默认情况下,character_set_server 变量的值是 latin1,這导致了中文乱码问题的出现。另外,数据库的编码方式也可能是导致...

    解决C#操作Mysql时中文乱码问题(真的解决了)

    在C#编程中,与MySQL数据库进行交互时,可能会遇到中文字符显示为乱码的问题。这个问题通常是由于编码不一致或设置不当导致的。本篇文章将深入探讨如何解决C#操作MySQL时的中文乱码问题,并提供相关的源码示例。 ...

    mysql乱码解决方法

    当从MySQL 4.1以下版本升级到4.1及以上版本时,可能会出现字符集兼容性问题,导致乱码。解决方法包括: - 确保所有数据库、表、字段的字符集设置为UTF-8。 - 如果是从非UTF-8编码的数据导入,需要先将数据文件...

    PHP+MySql中文乱码解决办法

    - **Linux环境**:如果使用GB2312编码,可能会导致文件名乱码,使得文件无法被正确读取。同样地,可以通过编码转换函数`mb_convert_encoding()`来解决这一问题。 通过以上方法,我们可以有效地解决PHP+MySQL开发...

    解决jsp+MysQL输入和输出中文乱码的方法!

    解决jsp+MysQL输入和输出中文乱码的方法! 解决jsp+MysQL输入和输出中文乱码的方法!

    在DELPHI中使用MyDAC连接MySQL数据库时中文显示乱码的解决方法

    1. **客户端与服务器端编码不一致**:DELPHI客户端与MySQL服务器端的字符编码设置不一致是导致中文乱码的主要原因。 2. **数据库表的字符集设置**:如果MySQL数据库中的表字符集不是统一的UTF-8,那么在查询时就可能...

    java插入mysql中文乱码解决

    1. **字符集不一致**:如果Java程序、JDBC驱动、MySQL服务器以及数据库表的字符集设置不一致,就会导致中文乱码。例如,如果Java程序使用的是GBK编码,而MySQL服务器使用的是UTF-8编码,则会导致乱码。 2. **连接...

    Mysql运行SQL语句中文乱码问题的解决方法

    ### MySQL运行SQL语句中文乱码问题的解决方法 在MySQL数据库中运行包含中文字符的SQL语句时,经常会遇到中文显示为乱码的问题。这一现象不仅降低了开发效率,还可能导致数据错误。本文将详细介绍如何彻底解决MySQL...

    向MySQL数据库存中文显示乱码

     数据库是我们软件开发中一个非常重要的组成部分,以前小编使用的是SQL Server,没有遇到过存储的中文是乱码的情况,后来在ssh的项目中使用的是MySQL的项目,遇到了乱码的问题,只要向数据库中存储中文数据会是...

    解决连接mysql中文显示乱码

    在处理数据库返回的数据时,还需要确保应用程序内部处理字符串时使用的字符集与数据库一致,避免因编码不匹配导致的乱码问题。这通常涉及数据库连接、数据读取、数据展示等多个环节的编码设置。 ### 实际操作步骤 ...

    pb导入mysql5.0中中文乱码

    pb 导入 mysql5.0 中中文乱码问题解决方案 在使用 Pb 将数据导入到 MySQL 5.0 时,中文乱码问题是一个常见的问题。在本文中,我们将讨论两个解决方案,帮助开发者快速解决中文乱码问题。 解决方案一:使用 set ...

    MySQL数据库—乱码总结

    MySQL数据库中的乱码问题通常出现在数据的输入、存储以及输出过程中,主要原因是字符集设置不一致导致。例如,在客户端(如JDBC连接)和服务器端之间存在不同的字符集设置,或者在数据库内部不同层级的字符集设置不...

    MySQl处理乱码

    MySQL是世界上最流行的开源关系型数据库管理系统之一,但在处理数据时,有时可能会遇到字符编码问题,导致乱码。本文将深入探讨MySQL处理乱码的相关知识点,包括字符集的概念、乱码产生的原因、解决方法以及如何避免...

    mysql乱码问题解决

    MySQL作为广泛使用的开源关系型数据库管理系统之一,在实际应用中也难免会遇到字符集不匹配导致的数据乱码问题。本文将详细探讨如何识别与解决MySQL中的乱码问题,并提供具体的操作步骤及注意事项。 #### 一、理解...

    解决 docker mysql 中文乱码问题

    使用 docker 启动 mysql 容器可能会出现中文乱码的情况,这里记录如何制作支持中文的 mysql 镜像 docker版本:18.06 mysql 版本:5.7 1. 创建 my.cnf 文件 [client] default-character-set=utf8 [mysql] default-...

    linux mysql中文乱码问题解决

    ### Linux MySQL中文乱码问题解决 #### 背景与问题描述 在使用Linux系统部署MySQL数据库时,可能会遇到中文字符显示为乱码的问题。这一现象通常发生在对含有中文字符的数据进行读取或写入操作时。中文乱码不仅影响...

Global site tag (gtag.js) - Google Analytics