mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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
mysql字符集如上,经测验`company` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '公司',company可以存储100个汉字或100个英文。
以下是查找的资料,仅供参考:
Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节
char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节
Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"
而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,
就是把它填满为100个字节)。
由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格
去掉!
资料引用:http://www.knowsky.com/1997.html
看你数据库的字符集是什么,如果是UTF8,则varchar2 100 可存100个汉字。
与这个参数有关系吧:nls_length_semantics
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
AL32UTF8
SQL> create table ss(ss varchar2(10));
表已创建。
SQL> insert into ss values('代数式地方大师傅');
已创建 1 行。
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
ZHS16GBK
SQL> create table ss (ss varchar2(10));
表已创建。
SQL> insert into ss values('大撒法似的似的');
insert into ss values('大撒法似的似的')
*
ERROR 位于第 1 行:
ORA-01401: 插入的值对于列过大
SQL> create table ss (ss varchar2(10));
表已创建。
SQL> insert into ss values('大撒法似的似的');
insert into ss values('大撒法似的似的')
*
ERROR 位于第 1 行:
ORA-01401: 插入的值对于列过大
=========================================================
这个与nls_length_semantics的设置有关,因为其当前设置为byte
需要改变一下建表时的定义,这么写:
create table ss (ss varchar2(10 char));
如果nls_length_semantics的值为char,则没有上述问题
相关推荐
然而,实际上MySQL的`VARCHAR`类型在存储时会额外使用1到2个字节来记录字符串的长度,这意味着即使使用UTF-8编码,`VARCHAR(50)`仍能存储50个英文字符或16个中文字符。 在MySQL 5.1及以上版本中,`VARCHAR`的最大...
在MySQL中实现中文汉字转拼音的功能,主要是为了方便在数据库查询和数据分析时处理中文文本,尤其是在没有全文索引或者需要进行复杂模糊匹配时。以下是一个简单的实现方法,它利用自定义函数来完成这一任务。 首先...
在MySQL中,`VARCHAR`类型用于存储可变长度的字符串,它相较于`CHAR`类型更加节省空间,因为它只存储实际输入的数据长度。然而,在数据库设计过程中,有时可能会遇到需要动态修改`VARCHAR`字段长度的情况,这通常是...
MySQL中文参考手册是一份详尽的数据库管理系统指南,专为使用MySQL进行数据存储、管理和查询的用户和开发者设计。MySQL是一种流行的开源关系型数据库管理系统的(RDBMS),它以其高效、稳定和易于扩展的特性而受到全球...
例如,如果我们存储一个字符 'a' 到 char(10) 字段中,实际上占用的空间是 10 个字符,而如果我们存储同样的字符到 varchar2(10) 字段中,实际上占用的空间只是 1 个字符(或 2 个字符,如果是中文)。这说明 ...
### PowerDesigner连接MySQL互相导入及显示中文注释详解 #### 一、安装ODBC驱动 在进行PowerDesigner与MySQL之间的连接之前,首先需要确保已经安装了ODBC (Open Database Connectivity) 驱动。ODBC驱动是实现不同...
通过以上步骤,可以有效解决Java Web开发中遇到的MySQL中文编码问题,确保应用程序能够正确地处理中文数据。 #### 五、总结 正确设置MySQL的字符集对于处理中文数据至关重要。通过修改配置文件、设置连接参数以及...
MySQL 中的中文字符导入是一个常见的问题,对于数据的导入和导出是一个最基本的功能。但是,当我们尝试导入中文字符时,总是报错“Data too long for column XX at row n”,让人很头疼。下面我们来详细解释这个问题...
MySQL 5.1是MySQL数据库管理系统的一个重要版本,它在早期的5.x系列中提供了许多增强功能和优化,为开发者提供了更稳定、高效的数据存储和管理解决方案。本手册旨在详细介绍MySQL 5.1的各项特性和操作方法,帮助用户...
在MySQL 4.0及更低版本中,VARCHAR(20)指的是20字节,对于UTF-8编码的汉字来说,只能存储6个字符。但在5.0及以上版本,VARCHAR(20)指的是20个字符,无论字符类型如何,都能存储20个,但最大长度仍然受限于65532字节...
- MySQL 8.0包含各种数据类型,如INT、VARCHAR、DATE、TIMESTAMP等,以及大量的内置函数,用于数学计算、字符串处理、日期和时间操作等。 MySQL 8.0中文参考手册包含了所有这些特性和更多内容的详细说明,包括安装...
11 MySQL 基准套件 12 MySQL 实用程序 12.1 各种 MySQL 程序概述 12.2 管理一个 MySQL 服务器 12.3 从 MySQL 数据库和表中倒出(dump)结构和数据 12.4 从文本文件导入数据 12.5 ...
无论是英文、数字还是中文汉字,都算作一个字符。而在4.1之前的版本,`N`表示的是最大存储的字节数。 根据MySQL参考手册,`VARCHAR`字段最多可以存储65535个字节的数据。但这不是一个绝对的上限,因为这个限制还...
总的来说,解决C#操作MySQL中文乱码问题的关键在于保持从数据库配置到代码再到文件的整个过程中的编码一致性,使用UTF-8编码,并确保在每个环节都正确地指定和处理。通过以上步骤,你应该能够成功地避免中文乱码问题...