mysql nvarchar用什么代替_mysql中char、varchar、nvarchar数据类型的用法区别

本文详细比较了MySQL中char、varchar和nvarchar数据类型的用法,包括它们的长度限制、适用场景(固定长度身份证号 vs 变长地址),以及在多语言支持和跨平台协作中的注意事项。

mysql中char、varchar、nvarchar数据类型的用法区别

mysql中char、varchar、nvarchar数据类型的用法区别:

说明:

1、char:

固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

2、varchar:

可变长度的非 Unicode 数据,最长为 8,000 个字符。

3、nvarchar:

可变长度 Unicode 数据,其最大长度为 4,000 字符。

4、nchar

固定长度的 Unicode 数据,最大长度为 4,000 个字符。

5、char和varchar都是字符串类型的

用Unicode编码的字符串,结果是字符的整数值

用法区别:

文字字段若长度固定,如:身分证号码,就不要用 varchar 或 nvarchar,应该用 char 或 nchar。

支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题

文字字段若长度不固定,如:地址,则该用 varchar 或 nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率。

相关文档:

1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。

2.用set password语句来修改用户的密码,三个步骤,先“mysql -u root”登陆数据库系统,然后“mysql> update mysql.user s ......

mysql error number 2003

Can't connect to MySQL server xxx.xxx.xxx.xxx (10061)

在ubuntu 9.04中默认安装了mysql,默认只能本地访问,google了一下:

采用

登录到MySQL服务器端,在mysql库下执行

grant all on *.* to 'remote'@'172.16.21.39' identified by 'password';

即可

如果要设置� ......

安装mysql

sudo apt-get install mysql-server #直接自动获得可用版本

也可以这样写

sudo apt-get install mysql-server-5.0 #安装mysql服务器5.0版本

安装后

/etc/init.d/mysql start (stop) 为启动和停止服务器

/etc/mysql/ 主要配置文件所在位置 my.cnf

/var/lib/mysql/ 放置的是数据库表文件夹,这里的m ......

2009-12-08 18:53

sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件。基本步骤如下:

1、创建包含sql命令的sql脚本文件

文件中包含一些列的sql语句,每条语句最后以;结尾,文件内容示例如下:

--创� ......

PHP中的MYSQL常用函数总结

1、mysql_connect()-建立数据库连接

格式:

resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]])

例:

$conn = @mysql_connect("localhost", "username", "password") or dir( ......

<think> 嗯,用户问的是nvarchar2在MySQL中对应的类型。这个问题涉及Oracle和MySQL两种数据库的数据类型映射,需要谨慎处理。 用户提供的引用材料很有价值。引用[1]和[2]都指出Oracle的nvarchar2是纯Unicode类型,最大长度以字符为单位,每个字符固定占用2字节。引用[3][4]则提供了MySQL相关类型的说明。 根据这些信息,核心差异在于:Oracle的nvarchar2是强制使用双字节编码的Unicode类型,而MySQL没有完全对应的类型。不过MySQL的utf8mb4字符集配合varchar类型可以实现类似效果,因为: - utf8mb4支持完整的Unicode字符(包括emoji等) - varchar定义的长度单位是字符而非字节 - 实际存储空间根据字符内容动态变化 需要提醒用户注意几个关键点: 1. MySQLvarchar最大长度限制是65535字节,因此实际字符容量会随字符变化 2. 如果存储的字符都是基本多文种平面(BMP),每个字符占3字节;补充字符占4字节 3. 对于纯ASCII数据,utf8mb4会比Oracle的nvarchar2更节省空间 用户可能是做数据库迁移或跨库开发,应该补充说明字符集设置的重要性,避免出现乱码问题。另外考虑到Oracle的nvarchar2有2000字符限制,在MySQL中换算成字节数时需要留出足够余量。 最后生成的问题要覆盖实际应用场景,比如迁移时的注意事项和存储优化建议,这对用户应该很有帮助。 </think>基于引用信息和MySQL特性分析,**Oracle 的 NVARCHAR2 在 MySQL 中没有完全对等的类型,但 `VARCHAR` 配合 `utf8mb4` 字符集是最接近的替代方案**。以下是关键对比和选型建议: --- ### 1. **核心差异与对应关系** | **特性** | **Oracle NVARCHAR2** | **MySQL 最接近方案** | |------------------------|--------------------------------------|-----------------------------------| | **类型定义** | 纯 Unicode 类型 | `VARCHAR` + `utf8mb4` 字符集 | | **长度单位** | 字符 (如 `NVARCHAR2(2000)` ) | 字符 (如 `VARCHAR(2000)` ) | | **字符编码** | 固定双字节 (UTF-16) | 动态字节 (UTF-8, 1-4字节/字符) | | **最大长度限制** | 2000 字符 (4000 字节) | 65535 字节 (受字符集影响) | | **存储汉字/字母** | 每个字符固定占 2 字节 | 汉字占 3-4 字节,字母占 1 字节 | | **是否依赖数据库字符集** | 独立于数据库字符集 [^1][^2] | 依赖列/表字符集设置 | --- ### 2. **MySQL 中的具体实现** - **创建表示例**: ```sql CREATE TABLE example ( -- 等效于 NVARCHAR2(100) oracle_nvarchar2_col VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ); ``` - **关键参数**: - **字符集**: `utf8mb4` (支持完整 Unicode,包括表情符号) - **排序规则**: `utf8mb4_unicode_ci` (大小写不敏感的 Unicode 排序) --- ### 3. **重要注意事项** 1. **长度计算差异** MySQL 的 `VARCHAR(n)` 定义的是**字符数**,但实际存储占用**字节数**受字符内容影响。例如: - 存储 100 个汉字:约占用 300 字节 (UTF-8) - 存储 100 个字母:仅占用 100 字节 *需确保总字节数不超过 65535 的限制 [^3][^4]。* 2. **与 `CHAR` 的区别** `VARCHAR` 是变长存储,适合替代 NVARCHAR2;而 `CHAR` 是定长(用空格填充),通常不适用。 3. **字符集一致性** 需确认数据库、表和连接均使用 `utf8mb4`,避免乱码: ```sql -- 检查全局设置 SHOW VARIABLES LIKE 'character_set%'; ``` --- ### 4. **何时选择其他类型?** - 若需 **严格固定字节存储** → 使用 `BINARY`/`VARBINARY` (但丧失字符语义) - 若需 **超长文本存储** → 使用 `TEXT` 类型 (如 `TEXT`, `LONGTEXT`) --- ### 总结建议 > ✅ **迁移方案**: > 将 Oracle 的 `NVARCHAR2(N)` 直接转换为 MySQL 的 **`VARCHAR(N) CHARACTER SET utf8mb4`**,并在代码中验证字符截断逻辑。 > ✅ **性能优化**: > 对于纯 ASCII 数据(如英文),可改用 `utf8mb4` 的 `CHAR` 类型减少存储空间 [^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值