标签归档:MySQL

mysql插入emoji表情报错(Incorrect string value:\x…)

原因:mysql的utf8编码不支持4字节的utf8,需要使用utf8mb4编码

解决方法:

Make sure all your tables’ default character sets and text fields are converted to utf8mb4, in addition to setting the client & server character sets, e.g. ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; and so on.If your data is already in the utf8 character set, it should convert to utf8mb4 in place without any problems. As always, back up your data before trying!

Also make sure your app layer sets its database connections’ character set to utf8mb4. Double-check this is actually happening – if you’re running an older version of your chosen framework’s mysql client library, it may not have been compiled with utf8mb4 support and it won’t set the charset properly. If not, you may have to update it or compile it yourself.

When viewing your data through the mysql client, make sure you’re on a machine that can display emoji, and run a SET NAMES utf8mb4 before running any queries.

 

来自:http://stackoverflow.com/questions/7814293/how-to-insert-utf-8-mb4-characteremoji-in-ios5-in-mysql

MySQL触发器简单实例

~~语法~~

CREATE TRIGGER <触发器名称>  –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
BEFORE AFTER }  –触发器有执行的时间设置:可以设置为事件发生前或后。
INSERT UPDATE DELETE }  –同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
ON <表名称>  –触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW  –触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>  –触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

–你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

~~实例~~

example1:

创建表tab1

1
2
3
4
DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
    tab1_id varchar(11)
);

创建表tab2

1
2
3
4
DROP TABLE IF EXISTS tab2;
CREATE TABLE tab2(
    tab2_id varchar(11)
);

创建触发器:t_afterinsert_on_tab1

作用:增加tab1表记录后自动将记录增加到tab2表中

1
2
3
4
5
6
7
DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
CREATE TRIGGER t_afterinsert_on_tab1
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN
     insert into tab2(tab2_id) values(new.tab1_id);
END;

测试一下

1
INSERT INTO tab1(tab1_id) values('0001');

看看结果

1
2
SELECT * FROM tab1;
SELECT * FROM tab2;

example2:

创建触发器:t_afterdelete_on_tab1

作用:删除tab1表记录后自动将tab2表中对应的记录删去

1
2
3
4
5
6
7
DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
      delete from tab2 where tab2_id=old.tab1_id;
END;

测试一下

1
DELETE FROM tab1 WHERE tab1_id='0001';

看看结果

1
2
SELECT * FROM tab1;
SELECT * FROM tab2;

JNDI连接数据库

一、数据源简介:
***********************************************************************************
在Java语言中,DataSource对象就是一个代表数据源实体的对象。一个数据源就是一个用来存储数据的工具,它可以是复杂的大型企业级数据库,也可以是简单得只有行和列的文件。数据源可以位于在服务器端,也可以位于客服端。

应用程序通过一个连接来访问数据源,那么一个DataSource对象就是用于提供连接数据源的工具。DataSource接口提供了两个方法用于建立和数据源的连接
使用DataSource对象建立和数据库的连接比起使用DriverManager接口更加高效,虽然两者的使用范围都很相似,并且都提供了方法用于建立和数据库的连接,设置连接的最大超时时间,获取流、登录。

但两者之间的区别更加明显。和DriverManager不同,一个DataSource对象能够识别和描述它所代表的数据源的属性,而且DataSource对象的工作和JNDI(Javatm Naming and Directory Interfaceti)具有密切的关系,DataSource的建立、发布、独立于应用程序的管理都依靠JNDI技术。

在JDBC2.0或JDBC3.0中,所有的数据库驱动程序提供商必须提供一个实现了DataSource接口的类,要使用数据源必须首先在JNDI中注册该数据源对象。
如果在JNDI中注册了数据源对象,将会比起使用DriverManager来具有两个方面的优势:
首先程序不需要像使用DriverManager一样对加载的数据库驱动程序信息进行硬编码,程序员可以选择先在JNDI中注册这个数据源对象,然后在程序中使用一个逻辑名称来引用它,JNDI会自动根据你给出的名称找到与这个名称绑定的DataSource对象。然后就可以使用这个DataSource对象来建立和具体数据库的连接了。

其次,使用实现了DataSource接口的类所具有的第二个优势体现在连接池和分布式事务上。连接池通过对连接的复用而不是新建一个物理连接来显著地提高程序的效率。从而适用于任务繁忙、负担繁重的企业级分布式事务。
***********************************************************************************

二、JNDI简介:
***********************************************************************************
JNDI是用于向Java程序提供目录和命名功能的API。它被设计成独立于特定的目录服务,所以各种各样的目录都可以通过相同的方式进行访问。

可以简单地把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和惟一的名字绑定。外部程序可以通过名字来获取对某个对象的引用。

在Intranets(企业内部网)和Internates(互联网)中目录服务(Directory service)扮演了一个非常重要的角色,它能够在众多的用户、机器、网络、服务、应用程序中访问各种各样的信息。目录服务提供了一系列的命名措施,用人类可以理解的命名方式来刻画各种各样的实体之间的关系

一个企业式计算环境(computing environment)通常是由若干代表不同部分的命名复合而成。比如在一个企业级环境中DNS(Domain Name System)通常被当成顶层的命名方案(top-level namein facility)区分不同的部门或组织。而这些部门或组织自己又可以使用诸如LADP或NDS的目录服务

从用户的角度来看,这些都是由不同的命名方案构成的复合名称。URL就是一个很典型的例子,它由多个命名方案构成。使用目录服务的应用程序必须支持这种复合构成方式

使用目录服务API的Java开发人员获得的好处不仅在于API独立于特定的目录或命名服务,而且可以通过多层的命名方案无缝访问(seamless acess)目录对象。实际上,任何的应用程序都可以将自身的对象和特定的命名绑定起来,这种功能可以使到任何的Java程序查找和获取任何类型的对象

终端用户可以方便地使用逻辑名称从而轻易地在网络上查找和识别各种不同的对象,目录服务的开发人员可以使用API方便地在不同的客服端之间切换而不需要作任何更改
***********************************************************************************

三、数据源和连接池的关系:
***********************************************************************************
JDBC2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接,在应用程序访问数据库时不需要编写连接数据库的代码,可以直接从数据源获得数据库连接。

在DataSource中事先建立了多个数据库连接,这些数据库连接保存在连接池(Connect Pool)中。Java程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接;当程序访问数据库结束,再将数据库连接放回连接池。
***********************************************************************************

四、数据源和JNDI的关系:
***********************************************************************************
DataSource对象是由Tomcat提供的,因此不能在程序中采用创建一个实例的方式来生产DataSource对象,而需要采用Java的另一个技术JNDI,来获得DataSource对象的引用。

Tomcat把DataSource作为一种可以配置的JNDI资源来处理。生成DataSource对象的工厂为org.apache.commons.dbcp.BasicDataSourceFactory。

在javax.naming包中提供了Context接口,该接口提供了将对象和名字绑定,以及通过名字检索对象的方法。Context中的主要方法有:
bind(String name,Object object):将对象与一个名字绑定
lookup(String name):返回与指定的名字绑定的对象
***********************************************************************************

五、Tomcat中数据源的配置:
***********************************************************************************
数据源的配置涉及修改server.xml和web.xml,在server.xml中加入定义数据源的元素<Resource>,在web.xml加入<resource-ref>元素,声明该Web应用所引用的数据

A.在server.xml中加入<Resource>元素:<Resource>元素用来定义JNDI Resource。

属性 描述
name 指定Resource的JNDI名字
auth 指定管理Resource的Manager,它有两个可选值:Container、Application
type 指定Resource所属的Java类名

<Resource name = “jdbc/BookDb”
auth = “Container”
type = “javax.sql.DataSource” />

B.在<Resource>元素中加入<ResourceParams>元素:<ResourceParams>元素用来指定各种参数值

属性 描述
factory 指定生成的DataResource的factory类名
maxActive 指定数据库连接池中处于活动状态的最大连接数目,0表示不受限制
maxIdle 指定数据库连接池中处于空闲状态的最大连接数目,0表示不受限制
maxWait 指定连接池中连接处于空闲状态的最长时间,超过会抛出异常,-1表示无限
username 指定连接数据库的用户名
password 指定连接数据库的口令
driverClassName 指定连接数据库的JDBC驱动程序
url 指定连接数据库的URL

<ResourceParams name = “jdbc/BookDb”>

<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>

<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>

<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<parameter>
<name>username</name>
<value>user</value>
</parameter>

<parameter>
<name>password</name>
<value>1234</value>
</parameter>

<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>

<parameter>
<name>url</name>
<value>jdbc:mysql//localhost:3306/BookDb?autoReconnect=true</value>
</parameter>

</ResourceParams>

C.在web.xml中加入<resource-ref>元素:<resource-ref>元素表示在Web应用中引用JNDI资源

属性 描述
description 对所引用的资源的说明
res-ref-name 指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应
res-type 指定所引用资源的类名字,与<Resource>元素中的type属性对应
res-auth 指定所引用资源的Manager,与<Resource>元素中的auth属性对应

***********************************************************************************

六、在Web应用中使用数据源:
***********************************************************************************
javax.naming.Context提供了查找JNDI Resource的接口,可以通过三个步骤来使用数据源对象:

A.获得对数据源的引用:
    Context ctx = new InitalContext();
DataSource ds = (DataSource)ctx.lookup(“java:comp/env/jdbc/BookDb”);

B.获得数据库连接对象:
Connection con = ds.getConnection();
  
C.返回数据库连接到连接池:
con.close();

在连接池中使用close()方法和在非连接池中使用close()方法的区别是:前者仅仅是把数据库连接对象返回到数据库连接池中,是连接对象又恢复到空闲状态,而非关闭数据库连接,而后者将直接关闭和数据库的连接
***********************************************************************************

七、发布使用数据源的Web应用:
***********************************************************************************
如果直接同JDBC访问数据库,可以把JDBC驱动程序拷贝到Web应用的WEB-INF/lib目录或者Tomcat安装目录下的common/lib目录下。

如果通过数据源访问数据库,由于数据源由Servlet容器创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat安装目录下的common/lib目录下,确保Servlet容器能够访问驱动程序。

Jboss as 7 添加mysql数据库配置文件 datasource

JBOSS AS 7.1发布了,今天研究了一下,果然像官方说的一样,速度比jboss4, 6确实快了很多,我I5电脑3秒就能启动完。不过新东西就是没中文的,得自己看英文网。下面我给出第一手资料,这里一扁英文的文章,我也参考了这文章。地址:

https://zorq.net/b/2011/07/12/adding-a-mysql-datasource-to-jboss-as-7/

其实也是比较简单的,主要有下面5步,这里只谈及以组件(module)方式创建:

1、创建文件夹:%JBOSS_HOME%/modules/com/mysql/main

2、COPY相应的JAR包到上面创建的目录下,这里使用的是:mysql-connector-java-5.1.18-bin.jar

3、在相同目录下创建module.xml,内容如下:

<?xml version=”1.0″ encoding=”UTF-8″?>

<module xmlns=”urn:jboss:module:1.0″ name=”com.mysql”>
<resources>
<resource-root path=”mysql-connector-java-5.1.18-bin.jar”/>
</resources>
<dependencies>
<module name=”javax.api”/>
</dependencies>
</module>

现在%JBOSS_HOME%/modules/com/mysql/main目录下已经有了两个文件:

module.xml

mysql-connector-java-5.1.18-bin.jar

4、修改JBOSS_HOME/standalone/configuration/standalone.xml文件,说明驱动使用相关信息;在standalone.xml文件中找到drivers元素(节点,element ),并添加以下内容(红色部分):

<drivers>
<driver name=”mysql” module=”com.mysql”/>
<driver name=”h2″ module=”com.h2database.h2″>
<xa-datasource-class>
org.h2.jdbcx.JdbcDataSource
</xa-datasource-class>
</driver>
</drivers>

5、在在standalone.xml文件中找到datasources元素,并在当中加入以下内容:

<datasources>
<datasource jndi-name=”java:/mydb” pool-name=”my_pool” enabled=”true” jta=”true” use-java-context=”true” use-ccm=”true”>
<connection-url>
jdbc:mysql://256.256.256.256:3306/mydb
</connection-url>
<driver>
mysql
</driver>
<security>
<user-name>
root
</user-name>
<password>
root
</password>
</security>
</datasource>

 

(转载请注明:原文,http://hi.baidu.com/kittopang/blog/item/5a94c3f833f9ef979e51468d.html)

至此,我们的工作已经完成。

你会在控件台看到大概以下信息:

JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]

JBAS010400: Bound data source [java:/mydb]

本地XAMPP搭建和安装WordPress

XAMPP是一个容易使用的apache服务器套装,包括MySQL, PHP 和 Perl等,不需要什么专业的知识和繁杂的配置,轻松搞定。

下面介绍一下如果利用XAMPP在本地搭建wordpress博客程序:

  1. 去下载Wordpress和XAMPP。
    Wordpress下载地址:http://wordpress.org/download/release-archive/
    XAMPP下载地址:http://xdowns.com/soft/1/71/2007/Soft_38520.html
  2. 安装XAMPP。
    只需要一种Next,当出现是否启动Mysql、Apache、Filezilla,是否预装htdocs文件夹和复选框时,记得勾选。Filezilla可以不要。
    注意:安装的时候最好关闭其它应用程序,尤其是像Flashfxp、迅雷、Skype之类默认使用80端口的程序,否则可能启动不了甚至根本无法正常安装Apache服务。当然,你也可以在安装之前更改这些程序的端口。
  3. 把Wordpress解压缩,得到的文件夹Wordpress放到xampp/htdocs文件夹里面。
  4. 启动XAMPP,且保证Mysql和Apache处于“Running”状态。                                          033931 2109345338 bdqikugajpg 本地XAMPP搭建和安装Wordpress
  5. 在浏览器里面输入localhost/phpmyadmin,这是本地的phpmyadmin,新建一个数据库,这里我假设数据库名称为“pademo”,你也可以设置成其它你喜欢的名字。                                                                                                   phpmyadminsnap1 本地XAMPP搭建和安装Wordpress
  6. 配置Wordpress的config文件。
    下载的Wordpress文件夹里面,只有wp-config-sample.php,打开它,可以看到下面几行代码:

    // ** MySQL settings ** // define('DB_NAME', 'putyourdbnamehere'); // The name of the database define('DB_USER', 'usernamehere'); // Your MySQL username define('DB_PASSWORD', 'yourpasswordhere'); // ...and password define('DB_HOST', 'localhost'); // 99% chance you won't need to change this value define('DB_CHARSET', 'utf8'); define('DB_COLLATE', '');// You can have multiple installations in one database if you give each a unique prefix $table_prefix = 'wp_'; // Only numbers, letters, and underscores please!

    更改为下面的:

     // ** MySQL settings ** // define('DB_NAME', 'pademo'); // The name of the database define('DB_USER', 'root'); // Your MySQL username define('DB_PASSWORD', ''); // ...and password define('DB_HOST', 'localhost'); // 99% chance you won't need to change this value define('DB_CHARSET', 'utf8'); define('DB_COLLATE', '');// You can have multiple installations in one database if you give each a unique prefix $table_prefix = 'wp_'; // Only numbers, letters, and underscores please!

    其实就是改了三个地方:
    DB_NAME(数据库名称,也就是我刚才设置的”pademo”),
    DB_USER(数据库的用户名,因为这是本地安装,用户名设为”root”即可)
    DB_PASSWORD(数据库密码,空白,注意是两个单引号中间空白,不是完全不要,也不是双引号)
    $table_prefix = ‘wp_’; 看一下这一语句,这是给数据库的表前缀,假如你想安装两个Wordpress在本地,那你的另一个博客就不能使用wp前缀的表,就应该修改成其它前缀,比如pptv反正不一样就可以了。这也同样适用于远程网络,给你的一个数据库设置多个博客。

  7. 配置完成以后,在浏览器里输入localhost/wordpress,后面的wordpress就是wordpress的文件夹,如果你更改了这个名字,本地网址做相应的修改即可。
  8. 接着,就会出现Install提示,点击,后面的就不用多说了,从未用过WP的用户也应该能够安装。                                                                                                 来源于 本地XAMPP搭建和安装WordPress | 帕兰映像