数据库问题技巧总结

1.mysql varchar 和 char的区别

VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符。

假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格

当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。

VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要。

2.SQL 语句应该大写还是小写?哪种更有利于执行效率? 

1、一般的数据库中SQL语句对大小写不敏感,一般如SQL关键字、对象名称大小写都会自动转换。但对引号内的字符串大小写会敏感。
2、执行效率没测试过,应该影响不大,如Oracle会在发送SQL语句的客户端自动转换。使用大写还是小写主要看个人习惯(包括保留字、关键字),但还是希望个人风格能够统一或者与团队配合,如同code中的注释。
3、部分数据是存储的是大小写,那区分就有意义了。另外数据字典中的元数据Oracle默认使用大写。oracle编译的时候都会把所有字母变成大写,理论上写大写是会快那么一丁点的。一般按照规范都会把关键字和表名写成大写,方便大家阅读!

3.文本字段用单引号还是双引号问题

SQL在文本值周围使用单引号(大多数数据库系统也接受双引号)。

如果是数值字段,则不要使用引号。

4.两个单引号问题

如果是查询条件,应该尽可能使用参数化查询。

实在是要单引号,那就再加一个单引号来转义。

用两个单引号,表示一个单引号。

比如查询Name为abc'cc的

SELECT * FROM [TABLE] WHERE [Name] = 'abc''cc'

 5.NULL问题

SQL 中,NULL 用于表示缺失的值。数据表中的 NULL 值表示该值所处的字段为空。

值为 NULL 的字段没有值。尤其要明白的是,NULL 值与 0 或者包含空白(spaces)的字段是不同的。

具有NULL值的字段是没有值的字段。

如果表中的字段是可选的,则可以插入新记录或更新记录而不向该字段添加值。然后,该字段将被保存为NULL值。 

使用比较运算符(例如=,<或<>)来测试NULL值是不可行的。

我们将不得不使用IS NULL和IS NOT NULL运算符。

NULL 值会给选取数据带来麻烦不过,因为 NULL 和其他任何值作比较,其结果总是未知的,所以含有 NULL 的记录不会包含在最终结果里面。

6.FOREIGN KEY

FOREIGN KEY 约束用于预防破坏表之间连接的行为。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

7.Oracle 中varchar2 为什么要加上2?

1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
大部分情况下建议使用varchar2类型,可以保证更好的兼容性

 8.java向mysql插入汉字乱码问题

1.首先保证项目和类的编码全部为UTF-8。

2.保证数据库的编码位UTF-8.

果数据库开始就建立好了:

alter database 表名 character set utf8;
连接数据库设置编码:
jdbc:mysql://地址:3306/数据库名?characterEncoding=utf8

3.如果还不行

1)MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是/etc/my.cnf

--在 [mysqld] 标签下加上以下内容:

default-character-set = utf8

character_set_server = utf8

注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。

--在 [mysql]  标签下加上一行

default-character-set = utf8

 

--在 [mysql.server]标签下加上一行

default-character-set = utf8

 

--在 [mysqld_safe]标签下加上一行

default-character-set = utf8

 

--在 [client]标签下加上一行

default-character-set = utf8

 

2)、  重新启动MySql服务

Windows可在服务管理器中操作,也可使用命令行:

net stop mysql 回车

net start mysql 回车

服务名可能不一定为mysql,请按自己的设置

Linux下面可是用 service mysql restart

如果出现启动失败,请检查配置文件有没有设置错误

3、  查看设置结果
登录MySql命令行客户端:打开命令行

mysql –uroot –p 回车

输入密码

进入mysql后 执行 :show variables like "% character %";
显示结果应该类似如下:

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置:

set character_set_client = utf8;

set character_set_server = utf8;

set character_set_connection = utf8;

set character_set_database = utf8;

set character_set_results = utf8;

set collation_connection = utf8_general_ci;

set collation_database = utf8_general_ci;

set collation_server = utf8_general_ci;

另外:

建立数据库时可以使用以下命令:

create database app_relation character set utf8; 

use app_relation;

source app_relation.sql;

修改数据库编码的命令为:

alter database app_relation character set utf8; 
原文地址:https://www.cnblogs.com/lukelook/p/9584071.html