이상 기록 - jdbc를 사용하여 mysql 데이터베이스에 연결할 때 url 설정에 몇 번의 문제

6833 단어 이상 기록
1. 첫 번째 질문: 중국어를 데이터베이스에 삽입하면 중국어는???
해결 방법: url 뒤에 파라미터 설정 인코딩 집합 추가
   xxxxxx?useUnicode=true&characterEncoding=utf8
url=jdbc:mysql://localhost/note?useUnicode=true&characterEncoding=utf8

2. 나중에 한 번은 같은 상황에 부딪혀서 복사하고 붙이는 것이 단숨에 이루어진 후에도 안 된다.
해결 방법: 위 URL의 '&' 은 '&' 으로 전환해야 합니다
  xxxxxx?useUnicode=true&characterEncoding=utf8
url=jdbc:mysql://localhost/note?useUnicode=true&characterEncoding=utf8

ps:당시 이 문제에 부딪혔을 때 해결 방법을 간단하게 적어 두었고 상세한 기록을 하지 않았다.방금 전 프로젝트를 가지고 몇 개 해봤는데 틀리지 않아서...어쨌든 위의 두 가지 URL 작성법에 문제가 없으니 나중에 만나서 다시 기록하세요.
3. 이후에 개발 도구(IDEA)를 바꿨습니다. 최근에 jdbc를 다시 사용해야 하는데 데이터베이스에 직접 연결된 곳에서 실행하는 데 오류가 발생했습니다.
오류 메시지를 인쇄하려면 다음과 같이 하십시오.
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.)
	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at cn.fan.util.DBUtils.getConn(DBUtils.java:46)
	at cn.fan.dbTest.DataBaseTest.Test_getConn(DataBaseTest.java:12)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:569)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:537)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:527)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:512)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:480)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:498)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:494)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:69)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1634)
	at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:637)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:351)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:224)
	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
	... 26 more
Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54)
	at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
	at com.mysql.cj.jdbc.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:118)
	at com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.java:293)
	at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:2424)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1767)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1624)
	... 33 more

번역기를 던져 뒤집어 보았는데, 주로 여러 시간대를 식별하거나 표시할 수 없다는 것이다.알 수 없지만 해결책을 찾았습니다.
url 뒤에 인자 추가하기:?serverTimezone=UTC
url=jdbc:mysql://localhost/note?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC

그러나 비록 잘못 보고하지는 않았지만 북경 시간인지 아닌지는 고쳐야 한다:?serverTimezone=GMT%2B8
url=jdbc:mysql://localhost/note?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8

ps: 여기 있는'%2B'는'+'의 전의 문자인데 사실은 GMT+8로 동팔구를 대표한다. (나도 UTC%2B8을 시도해 봤지만 안 돼)
앞으로도 이 방면의 문제에 부딪힐 수 있으니, 다시 수시로 보충해라!

좋은 웹페이지 즐겨찾기