mysql的varchar长度到底能插多少字符?
在用navicat迁移表结构,从oracle到MySQL时,注意如下坑:
1、如果varchar2(256)以上,则在mysql会自动用text取代,需要考虑手工修改字段类型为varchar(256)
ALTER TABLE DES_LOGIC_RESOURCE MODIFY REMARK VARCHAR(4000);
2、分区表自动变成普通表
对于varchar的长度设置,经过测试:
varchar(6)表示可以插入6个汉字,或6个字母数字,或汉字和字母数字共6个,是表示插入的字符数,不是字节数。
需要注意:这点和oracle的varchar2不同,oracle是字节数长度,不是字符长度,一个汉字占2个字节,所以长度6最多只能存3个汉字。
[root@lnpg ~]# mysql -ugistar -pxxxxxx -h192.168.207.143 -A -D resdb
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 256
Server version: 8.0.35 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE TABLE tmysql (
-> name varchar(6) DEFAULT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (1.76 sec)
mysql> insert into tmysql values('北京蒙迪艾尔');
insert into tmysql values('北京蒙迪艾尔');
Query OK, 1 row affected (0.21 sec)
mysql> insert into tmysql values('北京蒙迪艾尔');
Query OK, 1 row affected (0.04 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tmysql values('北京蒙迪艾尔a');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> show variables like '%char%';
+-------------------------------------------------+--------------------------------+
| Variable_name | Value |
+-------------------------------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
| validate_password.changed_characters_percentage | 0 |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+--------------------------------+
10 rows in set (4.94 sec)
mysql> insert into tmysql values('1234567');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into tmysql values('123456');
Query OK, 1 row affected (0.02 sec)
mysql> insert into tmysql values('abcd1234');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into tmysql values('abcdef');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tmysql values('abcde1');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tmysql values('abcdef1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into tmysql values('abcde好');
Query OK, 1 row affected (0.00 sec)
mysql> insert into tmysql values('abcde好1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tmysql;
+--------------------+
| name |
+--------------------+
| 北京蒙迪艾尔 |
| 北京蒙迪艾尔 |
| 123456 |
| abcdef |
| abcde1 |
| abcde好 |
+--------------------+
6 rows in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.35 |
+-----------+
1 row in set (0.02 sec)
mysql> desc tmysql;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name | varchar(6) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.39 sec)
mysql>
看下Oracle的测试:汉字占用2个字节。
[oracle@lncs ~]$ sqlplus jyc/jyc
SQL*Plus: Release 11.2.0.4.0 Production on Tue Jan 23 13:46:28 2024
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create table toracle
2 (
3 NAME VARCHAR2(6)
4 );
Table created.
SQL> insert into toracle values('北京蒙迪艾尔');
insert into toracle values('北京蒙迪艾尔')
*
ERROR at line 1:
ORA-12899: value too large for column "JYC"."TORACLE"."NAME" (actual: 12,
maximum: 6)
SQL> select length('北京蒙迪艾尔') from dual;
LENGTH('北京蒙迪艾尔')
----------------------
6
SQL> insert into toracle values('蒙迪艾');
1 row created.
SQL> select name ,length(name) from toracle;
NAME LENGTH(NAME)
------ ------------
蒙迪艾 3
SQL> insert into toracle values('蒙迪艾尔');
insert into toracle values('蒙迪艾尔')
*
ERROR at line 1:
ORA-12899: value too large for column "JYC"."TORACLE"."NAME" (actual: 8,
maximum: 6)
SQL> insert into toracle values('1234567');
insert into toracle values('1234567')
*
ERROR at line 1:
ORA-12899: value too large for column "JYC"."TORACLE"."NAME" (actual: 7,
maximum: 6)
SQL> insert into toracle values('123456');
1 row created.
SQL> insert into toracle values('12345蒙');
insert into toracle values('12345蒙')
*
ERROR at line 1:
ORA-12899: value too large for column "JYC"."TORACLE"."NAME" (actual: 7,
maximum: 6)
SQL> insert into toracle values('1234蒙');
1 row created.
SQL> commit;
Commit complete.
SQL> select length('1234蒙') from dual;
LENGTH('1234蒙')
----------------
5
SQL> select length('12345') from dual;
LENGTH('12345')
---------------
5
SQL> select length('好12345') from dual;
LENGTH('好123455')
------------------
7
SQL> select length('好1234') from dual;
LENGTH('好1234')
----------------
5
相关文章:

国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟
第三方移动推送对接,刚开始是移动端发起的。在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为什么不能做移动推送?话说,项目里目前所使用的推送就是自己做的。但是在App离线情况下,消息就收不到了。想起来了,这是最最重要的问题,是为了在离线的情况下,App还能收到通知和消息。如果不是因为这个,这个对接可以不做。因为手机端的app层不出穷太多了,为了给手机省电,用户会主动把运行在前端的app给咔嚓掉…虽然咔嚓掉,但是在有信息的情况下,用户还是希望能够收到信息。

mysql开启可以使用IP有权限访问
为实际的IP地址和你想要设置的密码。请小心操作,并确保你了解每个命令的作用。如果你对此有任何疑问,最好咨询经验丰富的数据库管理员。来设置或修改用户的密码。相反,你需要分两步来完成这个过程:首先创建或修改用户,并设置密码;然后授予相应的权限。用户应该能够从指定的内网IP地址访问MySQL服务器。用户已存在并且你只是想更改其密码或允许从另一个地址访问,使用。在MySQL 8.0及更高版本中,语句的语法有所变化。替换为你的内网IP地址,

鸿蒙Harmony-页面路由(router)详解
慢慢理解世界,慢慢更新自己,希望你的每一个昨天,今天,和明天都会很快乐,你知道的,先好起来的从来都不是生活,而是你自己

Spring Boot整合日期转换器(Converter)和拦截器(HandlerInterceptor)
配置文件形式针对框架进行个性化定制,例如:拦截器,类型转化器等等。WebMvcConfigurer配置类其实是。内部的一种配置方式,采用。

鸿蒙Harmony-层叠布局(Stack)详解
我们总是为了太多遥不可及的东西去拼命,却忘了人生真正的幸福不过是灯火阑珊处的温暖,柴米油盐的充实,人生无论你赚的钱,是多还是少,经历的事情是好还是坏,都不如过好当下的每一天!

Android Studio点击Run背后发生了什么
当点击Run的时候到底发生了什么呢

CentOS 7 安装私有平台OpenNebula
将以下内容添加到文件中。二、配置数据库MySQL2.1 安装MySQL添加以下MySQL源配置信息:2.2 修改MySQL密码2.3 创建项目用户和库

Android 某个应用缺少特殊权限导致系统一直重启解决
系统一些应用会使用到特殊权限,这时候要在系统配置一下否则系统会一直重启。出现该问题的时候,系统一直显示开机Log界面,无法正常进入Android系统界面。下面一起分析总结一下吧。本文不仅正文有学习价值,后续的延伸介绍内容也是有学习价值的。framework 定义的所有 权限都是有定义包含 protectionLevel 等级的,主要等级有:普通,运行时,权限,特殊。

适用于 Windows 的 10 款顶级 PDF 阅读器评测
您是否正在寻找适用于 Windows 台式机或笔记本电脑的可靠且高效的最佳 PDF 阅读器?然后您就打开了正确的文章。在本文中,我提供了有关互联网上一些免费 PDF 阅读器软件的详细信息。我相信读完这篇文章后,您心中将不再有关于免费 PDF 阅读器软件的疑问。

Android Studio 如何设置允许访问网络资源
在 Android 应用中,有时需要访问网络资源,例如从服务器获取数据或者下载文件等。为了保证应用能够正常访问网络资源,需要在 AndroidManifest.xml 文件中添加网络权限。同时,在 Android 9.0 及以上版本中,还需要在代码中进行额外的配置,以确保应用能够正常访问网络资源。本文将介绍如何在 Android Studio 中设置允许访问网络资源。_在android中添加可以访问网络的权限语句

Flutter配置Android和IOS允许http访问
Android和IOS允许http访问

公网环境使用navicat图形化工具远程连接本地MariaDB数据库
cpolar安装成功后,双击打开cpolar【或者在浏览器上访问本地9200端口 127.0.0.1:9200】,使用cpolar邮箱账号登录 web UI管理界面,如果还没有注册cpolar账号的话,点击免费注册,会跳到cpolar官网注册一个账号就可以了.在浏览器上访问9200端口,http://127.0.0.1:9200/,登录cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到mariaDB隧道,点击右侧的编辑。修改隧道信息,将保留成功的固定tcp地址配置到隧道中。

spring 笔记二 spring配置数据源和整合测试功能
• 数据源(连接池)是提高程序性能如出现的• 事先实例化数据源,初始化部分连接资源• 使用连接资源时从数据源中获取• 使用完毕后将连接资源归还给数据源常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid① 导入数据源的坐标和数据库驱动坐标② 创建数据源对象③ 设置数据源的基本连接数据④ 使用数据源获取连接资源和归还连接资源。

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发
如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

Linux安装MariaDB数据库
命令:yum install mariadb mariadb-server -y。命令:mysql_secure_installation。环境:centos7,可以连接外网。一、安装MariaDB。

通过内网穿透本地MariaDB数据库,实现在公网环境下使用navicat图形化工具
文章浏览阅读113次,点赞50次,收藏40次。cpolar安装成功后,双击打开cpolar【或者在浏览器上访问本地9200端口 127.0.0.1:9200】,使用cpolar邮箱账号登录 web UI管理界面,如果还没有注册cpolar账号的话,点击免费注册,会跳到cpolar官网注册一个账号就可以了.在浏览器上访问9200端口,http://127.0.0.1:9200/,登录cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到mariaDB隧道,点击右侧的编辑。修改隧道信息,将保留成功的固定tcp地址配置到隧道中。

鸿蒙ArkUI-X跨端应用开发,一套代码构建多平台应用
文章浏览阅读164次。ArkUI是一套构建分布式应用的声明式UI开发框架。它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用户体验。详情可参考ArkUI框架介绍ArkUI-X进一步将ArkUI扩展到了多个OS平台:目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。开发者基于一套主代码,就可以构建支持多平台的精美、高性能应用。