首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

修改MySQL varchar类型字段的排序规则

记录一个在工作中遇到的问题,也不算是问题,为的是找一种简便的方法批量修改数据表字段的排序规则,在MySQL中叫collation,常常和编码CHARACTER一起出现的。...collation有三种级别,分辨是数据库级别,数据表级别和字段级别。...level https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL...但是我遇到的场景是数据表级别已经是utf8_unicode_ci,而字段级别是utf8_general_ci,(这里我们关心的字段类型是varchar)。...由于需要修改的字段太多了,手工修改肯定是费时费力的。自然也想到了用脚本的方式批量修改,但是发现这种通过查找MySQL信息表、过滤、拼接生成批量修改的语句太好用了,而且还能做到针对varchar类型。

4.6K30

MySQL online DDL 更改Varchar字段长度

mysql 在DDL 权威指南 5.6 官方文档 :verision :https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.html...5.7 官方文档 : https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html 对比 对比过后我们可知...在5.6 里面执行DDL 根本没有单独操作Varchar这个字段类型。...注意 一个的字节长度VARCHAR列是依赖于字符集的字节长度 。 减少VARCHAR使用就地尺寸ALTER TABLE不被支持。减小VARCHAR 大小需要表副本(ALGORITHM=COPY)。...总结 在数据量很大的时候,varchar通过Online DDL做到快速进行更改字段长度。但是前提条件就是不会进行锁表和copy数据的过程。 这个前提条件就是数据库的支持5.7及5.7以上。

6.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL中使用VARCHAR字段进行日期筛选

在这篇文章中,我将为你解析如何在MySQL数据库中,对VARCHAR类型的日期字段进行筛选。这是一个在数据库设计中经常遇到的问题,尤其是当日期被保存为字符串格式时。...你是否也在搜索“MySQL VARCHAR日期筛选”、“如何在MySQL中筛选字符串日期”等关键词?不用再找了,这里有你想要的答案! 引言 在数据库设计中,选择合适的字段类型非常重要。...正确筛选VARCHAR日期字段的方法 ️ 为了正确筛选VARCHAR日期字段,我们可以使用MySQL的 STR_TO_DATE 函数: -- 考虑日期和时间 SELECT * FROM your_table_name...VARCHAR类型,我们也可以确保正确地按日期和时间筛选数据。...希望这篇文章帮助你解决了在MySQL中筛选VARCHAR日期字段的问题! 参考资料 MySQL官方文档 - STR_TO_DATE函数: 链接 日期和时间的存储选择: 链接

11510

小白学习MySQL - varchar类型字段为什么经常定义成255?

很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然。...官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字符集,整行的所有列的定义长度不能超过65535字节(bytes),text、blob等大字段类型除外, P.S. https://dev.mysql.com.../doc/refman/5.7/en/char.html 《小白学习MySQL - 变通创建索引的案例一则》提到了, InnoDB,如果需要建索引,就不能超过767bytes,utf8编码,255*3...一般情况下,我们用的是InnoDB引擎,utf8则是常用字符集,因此varchar类型字段定义为255比较合适。...但实际上,varchar(255)并不是最优的字符定义长度,究竟定成多少,还是要根据实际需求来决定,例如这个字段我就不需要创建索引,定义超过255,是可以的,只能说255是常规情况下较少出错的一个值。

93320

小白学习MySQL - varchar类型字段为什么经常定义成255?

很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然。...官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字符集,整行的所有列的定义长度不能超过65535字节(bytes),text、blob等大字段类型除外, P.S. https://dev.mysql.com...一般情况下,我们用的是InnoDB引擎,utf8则是常用字符集,因此varchar类型字段定义为255比较合适。...但实际上,varchar(255)并不是最优的字符定义长度,究竟定成多少,还是要根据实际需求来决定,例如这个字段我就不需要创建索引,定义超过255,是可以的,只能说255是常规情况下较少出错的一个值。...TIMESTAMP类型字段非空和默认值属性的影响》 《小白学习MySQL - 聊聊数据备份的重要性》 《小白学习MySQL - InnoDB支持optimize table?》

2.8K10

mysql varchar类型字段为数字时,不带引号查询时查询结果与事实不符

背景 今天出现了一个bug,在数据库中我们将订单表中的order_no从之前的bigint(20)改成varchar(20)后,原有的代码逻辑在进行时查询时,之前是以Long类型传参查询的。...select * from order_main where order_no='16541913435669023' 仔细观察后发现,得到正确结果的Sql,是加了引号的,代码中的sql是没有加引号的数字类型...根源 mysql5.7 查询varchar类型的数据时,不加引号,触发隐式转换导致的查询结果错误。...t1 where id=101; +------+ | id | +------+ | 101 | +------+ 1 row in set (0.00 sec) 结果符合预期,而在本例中,正确的写法应当是...、in参数包含多个类型、字符集类型或校对规则不一致等 隐式类型转换可能导致无法使用索引、查询结果不准确等,因此在使用时必须仔细甄别 数字类型的建议在字段定义时就定义为int或者bigint,表关联时关联字段必须保持类型

1.4K10

MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀

前言上篇文章MySQL字段的时间类型该如何选择?...千万数据下性能提升10%~30%我们讨论过时间类型的选择本篇文章来讨论MySQL中字符类型的选择并来深入实践char与varchar类型的最佳使用场景字符类型我们最经常使用的字符串类型应该是char与varchar...char(10) ,占用空间范围在10-30B中MySQL中的记录是存在于页中的,当字符串使用固定长度的char时,字段类型占用的空间会设置为最大值,方便修改操作可以在当前记录中进行修改(原地修改)(超出长度报错...MySQL允许最大占用空间为65535,当字符集使用UTF8时,每个字符可能占用1-3 Byte,那么varchar最大长度也就只能是 65535/3 = 21845当修改varchar类型的字符串时,...,而varchar不会填充末尾可以存储空格当char与varchar长度相同时,char查询性能较好;但如果char使用的空间太多,可能会导致查询不如varcharchar可以在原始记录进行修改,由于

31041

MySQL【第五章】——视图+索引

使用组合索引时遵循最左前缀集合;    5) 全文索引:使用FULLTEXT参数可以设置,全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上。...)][ASC|DESC])    6.删除索引    DROP INDEX 索引名 ON 表名  代码案例: (怎样正确使用索引有正确与错误案例供参考) #示例四:正确使用索引 #1)使用 like...t_user where username like '张%'; #无效 explain select * from t_user where username like '%张%'; #2)or条件中有建立索引的列才索引失效...补充说明: 批量导入:LOAD DATA INFILE(推荐)    可先通过SELECT INTO OUTFILE方式,将数据导出到Mysql的C:\ProgramData\MySQL\MySQL...Server 5.5\data目录下,再通过LOAD DATA INFILE方式导入

61620

迁移 valine 评论数据至 wordpress 数据库

数据更新(前提) 在导入 mysql 前,如果有些 valine 生成(或者我们自定义的)的数据项我们不想要(如 ACL/isNotified 等等),这时候我们需要将 jsonl 格式转为 json...ob_start(); print_r(json_encode($decode,JSON_UNESCAPED_UNICODE)); //使用 JSON_UNESCAPED_UNICODE 参数来正确输出...($utc_date)) 转换为普通日期格式 Y-m-d H:i:s 后再导入到 sql 文件,参考上方UTC时间格式化)(⚠️注意:若导入时候数据映射步骤显示不全,则表示 json 对象中的首行中包含缺失的数据...key,导入数据首行必须包含所有所需字段(包括””空值),否则导入后将缺失该字段 value 值) 执行下方 sql 语句通过对比 pid 与 objectId 值将 comment_parent_ID...关联评论数量 完成上述操作后导入 wordpress 的 mysql 数据库应该就能在对应文章/页面中加载出对应评论了,下面是统计文章评论数量,需要先把 wp_posts 表导出至本地(注意备份)。

9400

MariaDB非分布式数据库经典案例

错误语法: update letterperson set PrintState = '4' and t.SerPersonNo = '7e7732fc64d9'; 正确语法: update letterperson...类型字段输入不可见字符导致查询异常 问题现象: 一行数据中有a、b、c三个字段Varchar类型,当用a、c两个字段过滤时,结果集为真,当用where后用字段b过滤时,查询结果集为null。...问题影响: 当TDSQL实例的大事务在执行时发生了主从切换,会导致当前commit的事务数据丢失。 规避方法: 避免大事务SQL执行。...数据库里有MyIsam的表,导入数据时无法创建,导致报表不存在。 问题影响: MyISAM表数据无法导入。 规避方法: 手动修改建表语句的Engine修改为innodb后重新导入。...规避方法: 通过mysql命令行客户端连接后修改。 实验证明: 手动修改建表语句的Engine修改为innodb后重新导入。 1.

2.4K70

MySQL 经典案例分析:Specified key was too long

mysqlvarchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的。...为了验证索引字段的字符集设置为utf8时,varchar(256)确实是超长了,做了如下的测试: 那么问题简单了,更改tagvarchar(256)为tagvarchar(255),然后再进行导入数据...2)set global default_storage_engine="InnoDB" 通过这种方法终于保证了不修改源数据文件的情况下,能正确的重建线上数据至测试库,并且核对了数据和存储引擎,均与线上库一致...> create table test (id varchar(256),key (id)); mysql>create table test (id varchar(255),name varchar...test(id varchar(256),key (id)) row_format=dynamic; mysql>create table test(id varchar(255),name varchar

119.9K5532

Mysql千万级数据量批量快速迁移

使用命令登陆到需要被导入数据的mysql服务上 mysql -uroot -p123456 -h127.0.xxx.xxx -P3306 切换需要导入的数据库 use databasename(数据库名称...同样需要先登陆到mysql服务,load data导入执行一条sql,需要先创建一张和原来结构字段数相同的表,注意几点,比如字段类型可以由原来的int>varchar,但是返过来就不行,字段名和表明可以和原来不一样都可以...table tableName(ID,NAME,@dummy); 执行回车静静的等待就好了 注意事项 – 如果导出前,表中数据为空值null,导出后会是\N表示 – 数据库字段如果是varchar.../char,插入空时,load data 默认导入 空字符串 – 数据库字段如果是decimal,插入空时,load data 默认导入 0.00000000 – 数据库字段如果是datetime,...:00:00,数据正确性能够保证 – 数据库字段如果是datetime,插入HH:mm:ss时(HH后面应是英文冒号),load data 默认导入 0000-00-00 00:00:00,数据正确性不能够保证

2.7K10

mysqlmysql字符集设置为:utf8mb4,创建表时候错误Specified key was too long; max key length is 767 bytes

mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: 从上图中,我们可以看出,使用的是innodb及字符集。...我们来看看MySql InnoDB引擎对索引长度的限制: mysql单索引限制: 在默认情况下,InnoDB对单一的字段索引长度限制最大为767个字节。 这个长度怎么来的呢 ?...随意凯哥数据库的字符集使用的不是utf8,但是mysql系统变量innodb_large_prefix开启(因为凯哥使用的是默认配置)。...凯哥这里使用了第二种方案 2:修改联合主键中每个字段的长度 联合主键的三个字段如下: `registry_group` varchar(50) NOT NULL,   `registry_key` varchar... 提示,后来通过查询资料,发现: 由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误。

1.5K20

mysql使用联合索引提示字符长度超限制解决办法

mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: ​ 从上图中,我们可以看出,使用的是innodb及字符集。...我们来看看MySql InnoDB引擎对索引长度的限制: mysql单索引限制: 在默认情况下,InnoDB对单一的字段索引长度限制最大为767个字节。 这个长度怎么来的呢 ?...随意凯哥数据库的字符集使用的不是utf8,但是mysql系统变量innodb_large_prefix开启(因为凯哥使用的是默认配置)。...解决方案有两种: 1:mysql系统变量innodb_large_prefix开启。 需要修改配置,重启mysql服务等等。。。太麻烦了。...凯哥这里使用了第二种方案 2:修改联合主键中每个字段的长度 联合主键的三个字段如下: `registry_group` varchar(50) NOT NULL, `registry_key` varchar

3.9K00

第09期:有关 MySQL 字符集的乱码问题

; Query OK, 1 row affected, 2 warnings (0.01 sec) -- 两条警告的内容, 对于字段 a1,内容不正确,但是依然写入了。...但是由于数据本身没有被破坏,所以换个兼容的编码就可以获取正确的结果。...table t4 (a1 varchar(10),a2 varchar(10)) charset utf8mb4; Query OK, 0 rows affected (0.04 sec) -- 分别导入两部分数据...那每个字段单独读出来数据是完整的,但是所有字段一起读出来,数据总会有一部分乱码。具体看下面的示例: -- 字段 a1 编码 GBK,读出来正常,字段 a2 不正常。...由于 MySQL 处理数据是按照行的方式,按照列的方式会麻烦一点,我这里用 OS 层来合并导出的文件,再导入MySQL 表里。

1.4K20

真正线上索引失效的问题是如何排查的

VARCHAR(64) NOT NULL, `c` VARCHAR(64) NOT NULL, `d` VARCHAR(64) NOT NULL, `f` VARCHAR(64) DEFAULT...接下来谈到一个经常被忽视但非常重要的字段"extra",该字段描述了MySQL在执行查询时额外进行的一些操作。...explain select * from t2 where d = "ni"; 非索引字段查询 explain select d from t2 where b = "ni"; 索引覆盖,用联合索引的非前导列查询...以下是可能导致没有使用索引的几种情况: 索引正确创建:如果查询语句中的where条件字段没有创建索引,或者不符合最左前缀匹配的情况,就是正确创建索引。...查询中的索引字段使用了函数、类型不一致等导致索引失效。 针对这些情况,我们需要逐一分析: 如若索引正确创建,根据SQL语句创建适当的索引。如果不符合最左前缀,调整索引或修改SQL语句。

10310

Sqoop工具模块之sqoop-export 原

--relaxed-isolation:将连接事务隔离设置为提交给映射器的读取。 2、验证参数 --validate:启用对复制数据的验证,仅支持单个表复制。...例如: 在MySQL数据库中创建一个user_test表,语句如下: CREATE TABLE `user_test` ( `id` int(11) DEFAULT NULL, `name` varchar...如果想要实现数据库表中已经存在的数据就更新,不存在的数据就插入,那么就需要更改MySQL数据库中表字段的属性,如下: CREATE TABLE `user_test` ( `id` int(11)...注意:包含在--columns参数中的列需要定义默认值或允许NULL值。否则,数据库将拒绝导入的数据,从而导致Sqoop作业失败。...另一个基本导出,启用验证将数据导入bar表中: sqoop export --connect jdbc:mysql://db.example.com/foo --table bar  \     --export-dir

6.5K30

MySQL InnoDB索引介绍及优化

; ->正确 (注:需要MySQL5.6版本以上;在5.5及以前版本,可以对a字段进行索引扫描,但c字段不行) where a=? and b=? and c=?...首先,在较长的字段上建立索引是非常影响性能的,比如文章等超大varchar或者text字段,如果不是非建不可,一般不推荐,另外对InnoDB索引单字段(utf8)只能取前767bytes 那么如何处理长字段索引...主要根据类型来分别处理: 1、Email类,可以建立前缀索引 mail_addr varchar(2048) idx_mailadd(mail_addr(39)) -> 正确 解析:由于email邮件类型字段...`varchar(1024), lolcal_add varchar(1024) --建立联合索引或者单列索引 ->正确 九、对核心SQL索引做覆盖扫描 对于最核心的SQL,我们可以考虑使用索引覆盖...a > 5 order by b; #一旦前缀操作是一个range而非=操作,那么就无法利用到索引, 这里 a>5无法利用索引,二联合索引的第一个字段利用, 因此 order by b也无法利用索引查询

95010
领券