东东东 陈煜东的博客

标签存档: mysql

MySQL的insert ignore与replace into不同

以前从来没有接触过replace into这个语法,但是却看到很多人都在使用这个语法,并且应用在很多生产环境中,于是我也去学习了一下repalce into的用法。

关于replace

一句话:正常情况下表中有PRIMARY KEYUNIQUE索引,新数据会替换老的数据。没有老数据则insert该数据。

REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。使用REPLACE相当于对原有的数据(在PRIMARY KEY或UNIQUE索引下有值的数据)进行delete操作,然后再insert操作。为了能够使用REPLACE,您必须同时拥有表的INSERTDELETE权限。

除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

replace的使用一般是:只想对数据在数据库中保存一份,不想出现重复的数据(重复的主键、唯一索引),因为重复的数据不是我们想要的,会给业务逻辑带来麻烦。但是又要更新一些字段为最新的值,比如最后的检查时间、任务的结果。

关于insert ignore

一句话:忽略执行insert语句出现的错误,不会忽略语法问题,但是忽略主键存在的情况。

如果没有ignore关键字,那么在insert数据到一个表(在UNIQUE索引PRIMARY KEY有相同值)中,这时会出现错误,语句执行失败。但是使用了ignore关键字后,不会出现这个错误,并且新数据不会被插入到数据表中。

使用场景:比如一个多线程的插入数据表,为了不让多个线程向表中插入相同的数据,可以使用insert ignore来忽略重复的数据。有比如,你的程序down了,需要重新运行,那么会重新拉取数据再insert到数据库中,这个时候可能会存在重复的数据导致错误,ignore就可以解决这个问题。

两者的一些联系区别

联系:

不想向数据表中插入相同的主键、unique索引时,可以使用replaceinsert ignore,来避免重复的数据。

区别:

  • replace相当于delete然后insert,会有对数据进行写的过程。
  • insert ignore会忽略已经存在主键或unique索引的数据,而不会有数据的修改。

使用场景:

  • 如果不需要对数据进行更新值,那么推荐使用insert ignore,比如:多线程的插入相同的数据。
  • 如果需要对数据进行更新最新的值,那么使用replace,比如:任务的结果,最后的更新时间。

后话:自从知道了有insert ignore,我再也不会一股劲的使用replace了,妈妈再也不用担心数据库的频繁删写操作。

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: MySQL的insert ignore与replace into不同 – https://www.chenyudong.com/archives/mysql-insert-ignore-different-replace-into.html

分类: Programming

源码编译安装MySQL5.6.16

mysql5.6.16的安装和之前的5.5、5.1有些不同,编译的时候不再使用./configure来进行了,使用了cmake命令来进行编译项目。

准备编译环境

因为我的Linux是刚安装的,需要安装很多的必要程序。

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel gcc \ 
       autoconf automake zlib* fiex* libxml* libmcrypt* libtool-ltdl-devel*

下载MySQL

进入http://dev.mysql.com/downloads/mysql/ 的source/Generic Linux (Architecture Independent), Compressed TAR Archive,文件mysql-5.6.16.tar.gz

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz
tar xvf mysql-5.6.16.tar.gz
cd mysql-5.6.16

编译源码

接下来组织项目

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

注意,这个cmake是替代以前的./configure 步骤。如果你需要更多的参数,请参考http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

有时候会出现类似的问题。

Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source. — If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://example.com:80
  • 使用参数-DENABLE_DOWNLOADS=1 自动下载。
  • 有网络限制,设置http代理export http_proxy=http://example.com:80。环境变量http_proxy 也为 curl 等其他工具所用。尽管 yum 可以识别大写或小写的 http_proxy,但curl 要求环境变量的名称是小写。

如果这个cmake这个步骤有出现问题,解决后重新再cmake一次。如果输出类似这样,那么就好了。

-- Running cmake version 2.6.4
-- MySQL 5.6.16
-- Packaging as: mysql-5.6.16-Linux-x86_64
-- HAVE_VISIBILITY_HIDDEN
-- HAVE_VISIBILITY_HIDDEN
-- HAVE_VISIBILITY_HIDDEN
-- Using cmake version 2.6.4
-- Not building NDB
-- Library mysqlclient depends on OSLIBS -lpthread;m;rt;dl
-- GMOCK_SOURCE_DIR:/root/mysql-5.6.16/source_downloads/gmock-1.6.0
-- GTEST_LIBRARIES:gmock;gtest
-- Library mysqlserver depends on OSLIBS -lpthread;m;rt;crypt;dl
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mysql-5.6.16

接着编译源码

make && make install

编译时间缓慢,等待中…

修改文件权限,生成数据库

groupadd mysql
useradd -r -g mysql mysql
cd /usr/local/mysql
chown -R mysql:mysql .
scripts/mysql_install_db --user=mysql --ldata=/data/mysql/data
chown -R root .
chown -R mysql data

说明:参数--ldata说明你的数据文件存放的目录,如果你使用默认的路径,那么这个参数可以去除。如果你不增加此参数,但是在配置文件(见下方的datadir配置)中指定了其他的目录,那么会在启动MySQL的时候出现类似的提示:

Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql/data/VM_208.pid).

出现这个的解决办法就是增加--ldata参数,指定和配置文件中datadir相同的值,重新执行mysql_install_db即可。

设置配置文件

MySQL 5.6.8开始,就不在分发my.cnf等配置的demo,所以想随便拿一个用都比较麻烦。

my.cnf的配置文件的默认读取顺序为
File Name(上面的优先) Purpose
/etc/my.cnf Global options
/etc/mysql/my.cnf Global options
SYSCONFDIR/my.cnf Global options
$MYSQL_HOME/my.cnf Server-specific options
defaults-extra-file The file specified with --defaults-extra-file=path, if any
~/.my.cnf User-specific options
~/.mylogin.cnf Login path options
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set = utf8

[mysqld]
port=3306
bind-address=127.0.0.1
basedir=/usr/local/mysql
datadir=/data/data/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

############# default settings  ################
# time zone
default-time-zone = system
character-set-server = utf8
default-storage-engine = InnoDB

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

我的这个配置比较简单,声明一下常用的变量,如果你需要对性能优化,那么你需要细细研读一下配置文件。可以参考

启动MySQL,开机自动启动设置

手动启动MySQL。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
/etc/init.d/mysql start
##或者
service mysql start

在上面的步骤后,开机自动启动设置

chkconfig --add mysql
##有的系统需要下面的
chkconfig --level 345 mysql on

可以参考:http://dev.mysql.com/doc/refman/5.6/en/automatic-start.html

修改root密码

默认的密码是空的,很危险,需要修改一下。

在此之前,为方便调用mysql,我们先生成一个mysql的软链。

ln -s /usr/local/mysql/bin/mysql /usr/bin/

然后修改密码

mysql -uroot  -h127.0.0.1 -p
mysql> SET PASSWORD = PASSWORD('123456');

将来如果你忘记了root密码,可以参考重置MySQL密码

通过上面的步骤,就可以使用MySQL数据库了,另外可以为mysql安装phpmyadmin作为前端的管理界面。

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 源码编译安装MySQL5.6.16 – https://www.chenyudong.com/archives/building-mysql-5-6-from-source.html

分类: 网站建设

修改重置MySQL的root密码

修改密码

简单点的,需改自己的密码,使用一下命令。

mysql> SET PASSWORD = PASSWORD('123456');
##或者
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');  

修改其他用户的密码

mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
mysql> FLUSH PRIVILEGES;

这是忘记root密码的情况,重置密码

第一步,停止mysql服务器运行,关闭mysqld,接下里重新启动mysqld,使用以下命令

mysqld --skip-grant-tables

添加这个参数可以让任何人不用密码就能连接mysql数据库,并且获得任何权限。因为这个是不安全的,可以添加一个参数--skip-networking阻止远程连接。即以下代码启动mysql服务器

mysqld --skip-grant-tables --skip-networking

PS. 如果出现

160803 15:50:21 [Warning] The syntax 'for replication startup options' is deprecated and will be removed in MySQL 6.0. Please use 'CHANGE MASTER' instead.
160803 15:50:21 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

160803 15:50:21 [ERROR] Aborting

160803 15:50:21 [Note] ./mysqld: Shutdown complete

加上参数--user=root

mysqld --skip-grant-tables --skip-networking --user=root

第二步,使用mysql客户端访问mysql服务器,接下来运行sql语句更改root的密码。

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')  WHERE User='root';
mysql> FLUSH PRIVILEGES;

FLUSH语句是告诉服务器去重新加载表的权限到内存中,确保密码已经更改生效。

第三步,现在你已经可以使用root帐号和新密码去连接mysql服务器了。所以现在要停止mysql服务器,然后使用正常的参数启动mysql。例如,

mysqld --console
##或者
/etc/init.d/mysql start

只要不带参数--skip-grant-tables--skip-networking就行了

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 修改重置MySQL的root密码 – https://www.chenyudong.com/archives/reset-mysql-root-password.html

分类: 网站建设

Windows从noinstall zip安装MySQL免安装版

本篇适用于MySQL5.5版本,并已测试通过。对MySQL5.6来说,配置文件不能用。

安装MySQL作为开发的数据库,这是一个小程序员必备的。如果是开发大型的企业级程序,请选择企业级的数据库,比如Oracle、DB2,至于Microsoft的SQLServer就算了吧。

鉴于许多人在安装MySQL的时候出现许多的问题(大多使用MySQL的安装程序安装的),这里就写写MySQL的安装。

对于Windows的MySQL的安装其实很简单。个人推荐使用免安装版的MySQL,这种版本只要下来,解压缩后配置一下就可以使用了。而对那种安装包则就比较麻烦,本篇也不做介绍。因为周围有许多人的MySQL安装使用安装程序,而安装到一半,配置不会弄,MySQL数据库也弄的怪怪的。

第一步,下载MySQL的免安装版压缩包

好了,对于MySQL的免安装程序,我们先要下载一个MySQL的压缩包。下载地址:MySQL官网下载或者腾讯旋风分享下载

说明:在MySQL下载的时候,会有个让你login或sign up的按钮,不用注册了,看下方有个No thanks, just start my download.的链接。点击可直接下载,不用登录。

对于解压缩出来的MySQL,有几个配置文件样例,有my-small.ini、my-huge.ini等等,我们只要复制其中的一个,并命名为my.ini

Small: System has Medium: System has at least 64MB memory
Large: System has at least 512MB memory and the server will run mainly MySQL.
Huge: System has at least 1GB memory and the server will run mainly MySQL.
Heavy: System has at least 4GB memory and the server will run mainly MySQL.

第二步,配置MySQL

将第一步复制的配置文件my.ini打开,我们需要修改一下basedir(MySQL数据库的文件夹)和datadir(MySQL数据库的数据目录)。如下,

Example MySQL config file for medium systems.

#

This is for a system with little memory (32M – 64M) where MySQL plays

an important part, or systems up to 128M where MySQL is used together with

other programs (such as a web server)

#

You can copy this file to

/etc/my.cnf to set global options,

mysql-data-dir/my.cnf to set server-specific options (in this

installation this directory is C:\mysql\data) or

~/.my.cnf to set user-specific options.

#

In this file, you can use all long options that a program supports.

If you want to know which options a program supports, run the program

with the "–help" option.

The following options will be passed to all MySQL clients

[client]

password = your_password

port = 3306 socket = /tmp/mysql.sock

Here follows entries for some specific programs

The MySQL server

[mysqld] port = 3306 socket = /tmp/mysql.sock

skip-locking

key_buffer = 16M max_allowed_packet = 1M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M

set basedir to your installation path

basedir=E:/Program Files (x86)1/mysql-5.5.27-winx64

set datadir to the location of your data directory

datadir=E:/Program Files (x86)1/mysql-5.5.27-winx64/data

Don’t listen on a TCP/IP port at all. This can be a security enhancement,

if all processes that need to connect to mysqld run on the same host.

All interaction with mysqld must be made via Unix sockets or named pipes.

Note that using this option without enabling named pipes on Windows

(via the "enable-named-pipe" option) will render mysqld useless!

#

skip-networking

Disable Federated by default

skip-federated

Replication Master Server (default)

binary logging is required for replication

log-bin=mysql-bin

required unique id between 1 and 2^32 – 1

defaults to 1 if master-host is not set

but will not function as a master if omitted

server-id = 1

Replication Slave (comment out master section to use this)

#

To configure this host as a replication slave, you can choose between

two methods :

#

1) Use the CHANGE MASTER TO command (fully described in our manual) –

the syntax is:

#

CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,

MASTER_USER=<user>, MASTER_PASSWORD=<password> ;

#

where you replace <host>, <user>, <password> by quoted strings and

<port> by the master’s port number (3306 by default).

#

Example:

#

CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,

MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;

#

OR

#

2) Set the variables below. However, in case you choose this method, then

start replication for the first time (even unsuccessfully, for example

if you mistyped the password in master-password and the slave fails to

connect), the slave will create a master.info file, and any later

change in this file to the variables’ values below will be ignored and

overridden by the content of the master.info file, unless you shutdown

the slave server, delete master.info and restart the slaver server.

For that reason, you may want to leave the lines below untouched

(commented) and instead use CHANGE MASTER TO (see above)

#

required unique id between 2 and 2^32 – 1

(and different from the master)

defaults to 2 if master-host is set

but will not function as a slave if omitted

server-id = 2

#

The replication master for this slave – required

master-host = <hostname>

#

The username the slave will use for authentication when connecting

to the master – required

master-user = <username>

#

The password the slave will authenticate with when connecting to

the master – required

master-password = <password>

#

The port the master is listening on.

optional – defaults to 3306

master-port = <port>

#

binary logging – not required for slaves, but recommended

log-bin=mysql-bin

Point the following paths to different dedicated disks

tmpdir = /tmp/

log-update = /path-to-dedicated-directory/hostname

Uncomment the following if you are using BDB tables

bdb_cache_size = 4M

bdb_max_lock = 10000

Uncomment the following if you are using InnoDB tables

innodb_data_home_dir = C:\mysql\data/

innodb_data_file_path = ibdata1:10M:autoextend

innodb_log_group_home_dir = C:\mysql\data/

innodb_log_arch_dir = C:\mysql\data/

You can set .._buffer_pool_size up to 50 – 80 %

of RAM but beware of setting memory usage too high

innodb_buffer_pool_size = 16M

innodb_additional_mem_pool_size = 2M

Set .._log_file_size to 25 % of buffer pool size

innodb_log_file_size = 5M

innodb_log_buffer_size = 8M

innodb_flush_log_at_trx_commit = 1

innodb_lock_wait_timeout = 50

[mysqldump] quick max_allowed_packet = 16M

[mysql] no-auto-rehash

Remove the next comment character if you are not familiar with SQL

safe-updates

[isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M

[myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M

[mysqlhotcopy] interactive-timeout

将这两处的地址换成自己的MySQL的地址,已经date目录。注意斜线的方向,使用E:/Program Files/mysql-5.5.27-winx64或者E:\Program Files\mysql-5.5.27-winx64。仅有这两处需要改动,其他不必改动了,除非特殊需要。

第三步,启动MySQL

要启动MySQL也很简单,打开命令提示符。输入一下两个命令

cd /d E:\Program Files\mysql-5.5.27-winx64\bin\
mysqld --console

友情提醒:为了以后的方便,将里面的内容保存到startmysql.bat文件里,以后只要双击bat就可以运行mysql了。

会出现以下内容就成功了。

130317 20:11:05 [Note] Plugin 'FEDERATED' is disabled.
130317 20:11:05 InnoDB: The InnoDB memory heap is disabled
130317 20:11:05 InnoDB: Mutexes and rw_locks use Windows interlocked functions
130317 20:11:05 InnoDB: Compressed tables use zlib 1.2.3
130317 20:11:05 InnoDB: Initializing buffer pool, size = 128.0M
130317 20:11:05 InnoDB: Completed initialization of buffer pool
130317 20:11:05 InnoDB: highest supported file format is Barracuda.
130317 20:11:06  InnoDB: Waiting for the background threads to start
130317 20:11:07 InnoDB: 1.1.8 started; log sequence number 14128205
130317 20:11:07 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130317 20:11:07 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130317 20:11:07 [Note] Server socket created on IP: '0.0.0.0'.
130317 20:11:07 [Note] Event Scheduler: Loaded 0 events
130317 20:11:07 [Note] mysqld: ready for connections.
Version: '5.5.27-log'  socket: ''  port: 3306  MySQL Community Server (GPL)

第四步:更改MySQL密码

默认MySQL的root密码为空的,在某些地方,密码不能输入为空,所以需要更改密码。

首先先启动MySQL数据库,可以使用上面的bat启动MySQL。

然后根据下面的命令进行更改

mysql -u root -p #从命令行中进入mysql的客户端
use mysql;  #使用mysql这个数据库
update user set password=password("root") where user="root"; #对root密码进行更改
FLUSH PRIVILEGES; #刷新一下权限

安装到Windows service服务开机自动启动

如果需要将MySQL开机自动运行,并且以服务的形式存在,那么按照本方法进行即可。以服务的形式打开MySQL,就不用再适用上面的批处理文件了。

先停止MySQL Server的运行。以管理员方式运行命令提示符

向Windows添加服务

E:\Program Files\mysql-5.5.27-winx64\bin>mysqld --install MySQL5.5
Service successfully installed.

使用mysqld 并使用参数--install MySQL5.5,说明向服务注册一个叫MySQL5.5的服务名,如果不加服务名,则使用默认的MySQL作为服务名。

注意:使用--install 参数添加的服务为开机自动启动的。如果想要使用手工启动,那么使用参数--install-manual代替。命令mysqld --install-manual添加服务,需要手工启动服务。

启动MySQL服务

第二步只是向Windows服务添加了一个MySQL5.5的服务,但是并没有启动。可以到Windows服务里启动,或者使用命令行(需要管理员权限)

C:\> net start MySQL5.5
MySQL5.5 服务正在启动 .
MySQL5.5 服务已经启动成功。

从服务中停止MySQL服务

C:\> net stop MySQL5.5
MySQL5.5 服务正在停止.
MySQL5.5 服务已成功停止。

删除Windows的MySQL服务

E:\Program Files\mysql-5.5.27-winx64\bin>mysqld --remove MySQL5.5
Service successfully removed.

参考文章:Installing MySQL on Microsoft Windows Using a noinstall Zip Archive

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Windows从noinstall zip安装MySQL免安装版 – https://www.chenyudong.com/archives/installing-mysql-on-microsoft-windows-using-a-noinstall-zip-archive.html

分类: 网站建设

hibernate mysql 中文乱码异常

用Hibernate往mysql 5.1数据库中进行查询数据,表的结构使用的是utf-8编码,服务器在Linux上,这个时候往数据库上查询,插入没问题。后来往5.1的数据库导入模型的时候,外键不见了,于是在Windows本地安装了一个mysql 5.5的数据库,导入模型正常。但是进行查询的时候抛出异常说

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?? as ??0_, owner0_.??? as ???0_, owner0_.?? as ??0_, owner0_.???? as ????0_ fro' at line 1

但是上面的Hibernate自动生成的sql语句显示不会乱码,当然,这两者没关系,表示我的这个sql语句是没有问题的。

于是我在Windows的mysql5.1中建立一个同样的数据库,发现也是这样的错误。

尝试尝试是否是编码的问题,我检查数据库都是用UTF-8编码设置的,没发现有什么异常。

最后在hibernate.cfg.xml上的session-factory中添加编码设置,最后的文件配置是这样的。

<session-factory>

    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">password</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="connection.useUnicode">true</property>
    <property name="connection.characterEncoding">UTF-8</property>

    <property name="show_sql">true</property>

    <mapping resource="owner.hbm.xml" />

</session-factory>

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: hibernate mysql 中文乱码异常 – https://www.chenyudong.com/archives/hibernate-excute-mysql-chinese-character-garbled-exception.html

分类: JavaEE

pureftp网页管理页面mysql server not found

在安装了lnmp包后,又安装了ftp,进入ftp管理地址http://你的域名或IP/ftp/install.php

Error: MySql server not found. MySql error : Access denied for user ‘ftp’@’localhost’ (using password: YES)

http://www.vpser.net/manage/lnmp-pureftpd-cp.html 上说的是0.7版本后此文不适用。

http://www.cnweed.com/1480.html 说更改权限。更改完后,还是出现该错误。在我后面修改完后,可以登录的情况下,我对此进行试验,没有必要。只要有基本的select、delete、insert、update即可。

但是都不管用,原来我在安装的时候,设置密码,我的密码中有个引号’,这个的存在导致了密码字符串出了问题。更改密码后,发现可以出现登陆界面。

但是ftp管理员的密码不对,应该又是在设置ftp管理员密码的时候出了问题,通过md5一次加密后,更改密码。这才登陆成功。

这次的事件,主要是由特殊符号引起的,以后在将特殊符号写入到文件的时候要注意这样的情况。

后续,在使用ftp登陆,发现不能登陆,只有Linux系统用户可以登陆。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: pureftp网页管理页面mysql server not found – https://www.chenyudong.com/archives/pureftp-login-mysql-server-not-found.html

分类: 网站建设

php和phpMyAdmin向mysql数据库插入中文数据导致乱码

发现用phpMyAdmin向MySQL数据库中插入中文数据乱码,通过php插入中文数据也是乱码。于是就查看数据库中对字符的处理。

我先向数据库中创建一个表webgrades

create table webgrades(班级 varchar(20) ,学号 varchar(11) ,姓名 varchar(10) ,成绩 int (3) );

然后用phpmyadmin向MySQL中插入中文数据乱码,其中SQL语句是这样的

insert into webgrades values("计算机2002.1","20020100101","王丽",95);

,在phpmyadmin中显示中文就出现 “????” 乱码了,怎么办呢?

查看该表的属性,在“操作”->”表选项”中看见”整理”这个下拉框中显示”latin1_swedish_ci”,发现不对,应该使用unicode码,于是将其改成”utf8_general_ci“。再次向表中插入数据,发现中文还是乱码。

查看“表结构”,发现每个字段后面的“整理”都为”latin1_swedish_ci”,于是将其更改成”utf8_general_ci“,再向表中插入中文数据,不显示乱码了。

在创建表的时候应该先添加字段的编码,在字段类型后面添加”CHARACTER SET utf8 COLLATE utf8_general_ci“,比如SQL语句

create table webgrades(
    班级 varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci,
    学号 varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci,
    姓名 varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci,
    成绩 int (3));

那么CHARACTER SET utf8 COLLATE utf8_general_ci是干什么用的呢?

如果表的结构指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校对规则Y。 如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。 否则,采用默认的字符集和服务器校对规则。

可以看看MySQL Unicode Character Setsutf8_unicode_ci vs utf8_general_ci

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: php和phpMyAdmin向mysql数据库插入中文数据导致乱码 – https://www.chenyudong.com/archives/insert-chinese-data-into-mysql-causing-garbled-via-php-and-phpmyadmin.html

分类: 网络

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑